[討論] 影像頻率濾波消失

看板MATLAB作者時間7年前 (2016/10/31 00:54), 編輯推噓1(1013)
留言14則, 1人參與, 最新討論串1/1
現在有一個task作影像頻域濾波 流程如下: 輸入影像 f(x,y) -> FFT(f(x,y)) -> F(u,v) -> G(u,v) = H(u,v)*F(u,v) -> IFFT(G(u,v)) 輸出影像 -> g(x,y) ================================================= 以下是我的實現方式: fxy = imread(''); Fuv = fft2(fxy); 我先假設H(u,v) = 1; gxy = ifft2(Fuv); 但是 real(gxy) 卻無法讀出和fxy相同的影像,請問原因在哪?? ================================================= 另外,我現在要假設H(u,v)是一個理想低通濾波器,要實現濾波處理 實現方式如下: fxy = imread(''); % begin to perform [(-1)^(x+y)] * f(x,y) for i = 1:MM for j = 1:NN if(mod(i+j,2)~=0) fxy(i,j,:) = (-1)*fxy(i,j,:); end end end point = 512 Fuv = fft2(fxy, point , point); % DFT( [(-1)^(x+y)] * f(x,y) ) % set ideal LPF Ideal_LPF = zeros(point, point,3); for i = (point/4 +1) : 3*point/4 for j = (point/4 +1) : 3*point/4 Ideal_LPF(i , j, :) = 1; end end Guv = Fuv .* Ideal_LPF; gxy = real(ifft2(Guv,point, point)); for i = 1:point for j = 1:point if(mod(i+j,2)~=0) gxy(i,j,:) = (-1)*gxy(i,j,:); end end end 以上作法作出來的結果還是怪怪的 黃色底是濾波處理,紅字是我設定H(u,v)的過程 請問是哪裡需要改進呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.230.151 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1477846485.A.532.html

11/02 17:34, , 1F
應該是檔案格式問題喔!!
11/02 17:34, 1F

11/02 17:34, , 2F
一張圖有RGB三個成分 一次做FFT下去就亂七八糟了
11/02 17:34, 2F

11/02 17:35, , 3F
請先用 rgb2gray 轉成灰階圖 這樣fft2, ifft2前後結果
11/02 17:35, 3F

11/02 17:35, , 4F
就會一致
11/02 17:35, 4F

11/02 17:36, , 5F
秀圖時要使用imagesc 就會看到一樣的圖形了
11/02 17:36, 5F

11/02 17:36, , 6F
至於彩圖怎麼做FFT >.< 我就不會了
11/02 17:36, 6F

11/02 17:37, , 7F
A= imread('mr_brain.jpg');
11/02 17:37, 7F

11/02 17:37, , 8F
B= rgb2gray(A);
11/02 17:37, 8F

11/02 17:38, , 9F
C= fft2(B);
11/02 17:38, 9F

11/02 17:38, , 10F
D= ifft2(C);
11/02 17:38, 10F

11/02 17:39, , 11F
imagesc (D) 或 imagesc (B) 就會得到一樣的圖了
11/02 17:39, 11F

11/02 17:44, , 12F
我之前設計濾波器 是先設計filter樣子 之後用內建函數跑
11/02 17:44, 12F

11/02 17:46, , 13F
需要用到的函數有 freqspace, fwind1, filter2等函數
11/02 17:46, 13F

11/02 17:48, , 14F
總之請你先參考fwind1函數的help內容
11/02 17:48, 14F
文章代碼(AID): #1O5YNLKo (MATLAB)