[爆卦]MATLAB fft2 fftshift是什麼?優點缺點精華區懶人包

為什麼這篇MATLAB fft2 fftshift鄉民發文收入到精華區:因為在MATLAB fft2 fftshift這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kevio (成仔)標題Re: [其他] 影像弱化的頻域問題時間Mon Dec 5 11:34...


我改了一下code 如下
用你的檔案 Hr4ogpo.png
重點應該是
1. 沒用 ifftshift -->造成fft2/ifft2轉換錯誤
2. H中有NaN數值,這個我就沒幫你算了 直接指定為1
至於fftshow子函數應該不需要吧,你程式中已經做轉換了
另外 我不知道H需不需要做fftshift @@~ 我總覺得不應該做
以上
------------------------------------------------------------

clear
clc
close all

image_rgb = imread('Hr4ogpo.png'); % read the image
image_gray = rgb2gray(image_rgb); % transform RGB image into grayscale
%imshow (image_gray);
%fp = motion(image_gray); %degradation
f=image_gray;
imshow(f); % 轉換前
% (M,N) -- Size of the image
[M,N] = size(f);
[V,U] = meshgrid(1:N, 1:M);

%trans the (M/2, N/2) to the origin(0,0)
U = U - floor( M/2 );
V = V - floor( N/2 );

c = pi*(0.2*U+0.1*V);
H = (1./c).*sin(c).*exp(-i*c);
H = fftshift( H ); %這邊請你自己決定要不要這行
H(isnan(H)) = 1; % NaN數值造成轉換錯誤
F = fftshift(fft2(f));


Fp = H.*F;
fp = real(ifft2(ifftshift(Fp)));
fp = im2uint8( mat2gray(fp) );

figure
imshow(fp); % 轉換後

※ 引述《sherry470 (sherry)》之銘言:
: 最近在學習用MATLAB處理影像
: 在做影像弱化的時候遇到一些問題想請教大家
: 我想把一個影像讀入後做FFT轉換,在頻域和degradation function相乘
: 再把相乘後的影像做反FFT轉換,得到一個比較模糊的影像
: degration function:
: http://i.imgur.com/I8a2LUP.png
: 以下是我的主程式:
: clear
: clc
: close all
: image_rgb = imread('original.png'); % read the image
: image_gray = rgb2gray(image_rgb); % transform RGB image into grayscale
: fp = motion(image_gray); %degradation
: figure,fftshow(fp, 'abs'); % show the image
: title('After');
: 函數motion就是做影像處理的部分:
: function fp = motion(f)
: % (M,N) -- Size of the image
: [M,N] = size(f);
: [V,U] = meshgrid(1:N, 1:M);
: %trans the (M/2, N/2) to the origin(0,0)
: U = U - floor( M/2 );
: V = V - floor( N/2 );
: c = pi*(0.2*U+0.1*V);
: H = (1./c).*sin(c).*exp(-1j*c);
: H = fftshift( H );
: F = fftshift(fft2(f));
: Fp = H.*F;
: fp = real(ifft2(Fp));
: fp = im2uint8( mat2gray(fp) );
: 函數fftshow則是參照手邊書籍中提供的方式顯示DFT轉換結果:
: function fftshow(f, type)
: if nargin<2,
: type='log';
: end
: if (type=='log')
: fl = log(1+abs(f));
: fm = max(fl(:));
: imshow(im2uint8(fl/fm))
: elseif (type=='abs')
: fa = abs(f);
: fm = max(fa(:));
: imshow(fa/fm)
: else
: error('TYPE must be abs or log.');
: end;
: 原圖是這樣
: http://i.imgur.com/Hr4ogpo.png
: 頻域處理相乘後的DFT是這樣
: http://i.imgur.com/ZYydO35.png
: 可是經過反FFT轉換以後變成一張全黑的圖
: 看起來像是反傅立葉轉換時出了問題
: 試了好久都沒辦法成功
: 請問是哪裡寫的怪怪的嗎QQ

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.253.173
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1480908897.A.278.html
※ 編輯: kevio (140.116.253.173), 12/05/2016 11:42:45
kevio: c=0.001時 H=1 , 所以NaN應當指定為1 12/05 11:43

你可能也想看看

搜尋相關網站