[其他] 影像弱化的頻域問題

看板MATLAB作者 (sherry)時間8年前 (2016/12/05 02:54), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
最近在學習用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), 來自: 123.204.44.70 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1480877670.A.9DA.html

12/05 11:44, , 1F
NaN應當指定為1 我信中寫錯了
12/05 11:44, 1F
文章代碼(AID): #1OH6PcdQ (MATLAB)
文章代碼(AID): #1OH6PcdQ (MATLAB)