Ho convoluto un'immagine che ho creato in MATLAB con una funzione gaussiana 2D che ho anche definito in MATLAB e ora sto provando a deconvolgere la matrice risultante per vedere se ottengo la funzione Gaussiana 2D indietro usando i comandi fft2 e ifft2. Tuttavia la matrice che ottengo di conseguenza non è corretta (a mia conoscenza). Ecco il codice per quello che ho fatto finora: CodiceDeconvoluzione 2D usando FFT in Matlab Problemi
% dell'immagine in ingresso (img) [300x300 gamma]
N = 100;
t = linspace(0,2*pi,50);
r = (N-10)/2;
circle = poly2mask(r*cos(t)+N/2+0.5, r*sin(t)+N/2+0.5,N,N);
img = repmat(circle,3,3);
% Codice in 2D funzione gaussiana con c = 0 in ordine a = 1/64 per (Z) [300x300 matrice] Codice
x = linspace(-3,3,300);
y = x';
[X Y] = meshgrid(x,y);
Z = exp(-((X.^2)+(Y.^2))/(2*1/64));
% per 2D convoluzione di img con Z (C) [599x599 matrice]
C = conv2(img,Z);
% ho abbiamo verificato che questa convoluzione è corretta usando i vettori di profili di sezione trasversale per img e C e i grafici x-y risultanti sono ciò che mi aspetto dalla convoluzione.
% Dalla mia conoscenza della convoluzione, l'algoritmo funziona come un moltiplicatore nello spazio di Fourier, quindi dividendo la trasformata di Fourier del mio output (immagine convoluta) dal mio input (img) dovrei riprendere la funzione di diffusione dei punti (Z - Funzione gaussiana 2D) dopo che la trasformata di Fourier inversa viene applicata a questo risultato per divisione.
% Codice in materia di deconvoluzione tentato 2D
Fimg = fft2(img,599,599);
% zero padding aggiunto per aumentare risultato da 599x599 gamma
FC = fft2(C);
R = FC/Fimg;
% ora ottengo questo prompt errore: Warning: Matrix è vicino al singolare o mal ridimensionato. I risultati potrebbero essere inaccurati. Rcond = 2.551432e-22
iFR = ifft2(R);
mi aspetto IFR per essere vicino alla Z, ma sto ottenendo qualcosa di completamente diverso. Potrebbe essere un'approssimazione di Z con valori complessi ma non riesco a controllarlo poiché non so come tracciare una matrice 3D complessa in MATLAB. Quindi, se qualcuno può dirmi se la mia risposta è corretta o errata e come far funzionare questa deconvoluzione? Sarei molto apprezzato
Leggermente fuori tema nitpick: si Convolve un segnale, non convolute – chappjc
Poiché i risultati di divisione in una matrice 599x599, come si ottiene la funzione gaussiana 2D che è 300x300? – Curious
@IssamLaradji l'immagine risultante è 599x599 con il gaussiano 2D contenuto nelle prime 300x300 righe. Ho usato l'indicizzazione a matrice per ottenere un array 300x300 –