Mam zawiłe obraz utworzony w Matlab z funkcją 2D Gaussian, które również zdefiniowałem w Matlab i teraz próbuję dekonwolucji wynikowej macierzy, aby zobaczyć, czy dostaję funkcję 2D Gaussian wróć używając poleceń fft2 i ifft2. Jednak macierz, którą otrzymuję w rezultacie jest niepoprawna (według mojej wiedzy). Oto kod do tego, co zrobić w ten sposób pory:Dekonwolucji 2D przy użyciu FFT w Matlab Problemy
% kodu na obraz wejściowej (IMG) [300x300 tablicy]
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);
% kodu 2D funkcją Gaussa z C = 0 porządek = 1/64 (z) [300x300 tablica]
x = linspace(-3,3,300);
y = x';
[X Y] = meshgrid(x,y);
Z = exp(-((X.^2)+(Y.^2))/(2*1/64));
% kodu 2D splotu img z z (C) [599x599 tablica]
C = conv2(img,Z);
% mam przetestowali, że ten splot jest poprawny przy użyciu wektorów profilu przekroju dla img i C, a powstałe spekulacje x-y są tym, czego oczekuję od splotu.
% Z mojej znajomości splotu algorytm działa jako mnożnik w przestrzeni Fouriera, dlatego przez podzielenie transformaty Fouriera mojego wyjścia (zawiłego obrazu) przez moje wejście (img) powinienem odzyskać funkcję rozproszenia punktu (Z - funkcja 2D Gaussa) po odwrotnej transformacji Fouriera zastosowanej do tego wyniku przez podział.
% Kod dekonwolucji próbował 2D
Fimg = fft2(img,599,599);
% zerowy wyściółka dodany do zwiększenia wynik 599x599 tablicy
FC = fft2(C);
R = FC/Fimg;
% teraz uzyskać ten monit o błędzie: Ostrzeżenie: Matrix jest blisko pojedynczej lub źle skalowane. Wyniki mogą być niedokładne. RCOND = 2.551432e-22
iFR = ifft2(R);
Czekam IFR być blisko do Z, ale ja dostaję coś zupełnie innego. Może to być przybliżenie Z do złożonych wartości, ale nie mogę tego sprawdzić, ponieważ nie wiem, jak narysować trójwymiarową macierz złożoną w programie Matlab. Jeśli więc ktoś może mi powiedzieć, czy moja odpowiedź jest poprawna czy niepoprawna i jak uruchomić tę dekonwolucję? Byłbym bardzo doceniony.
Lekko off topic nitpick: ty convolve sygnał, nie skręcony – chappjc
ponieważ wyniki dywizji w 599x599 matrycy, jak masz Gaussa funkcji 2D, który jest 300x300? – Curious
@IssamLaradji wynikowy obraz to 599x599 z 2D Gaussian zawartym w pierwszych 300x300 rzędach. Użyłem indeksowania macierzy, aby odzyskać tablicę 300x300. –