0
我正在努力尋找我的代碼或推理中的錯誤;我必須手動創建一個高/低通濾波器來處理頻域中的圖像。我不允許使用butter(),filter()和其他相關函數。MATLAB中的手動高/低通濾波器
最終的結果,我瞄準的東西,類似於下面顯示的那樣:link 1,link2。
爲了達到這個結果,我創建了以下功能:
function out = hlow2(x,n,mask,u)
% x - input image
% n - mask size
% mask - user-defined mask
% u - user choice: 1 -> high-pass, anything else -> low-pass
a=size(x);
mask=padarray(mask,[floor((a(1)-n)/2) floor((a(2)-n)/2)],'replicate');
mask=padarray(mask,[1 1],'replicate','pre');
% i am padding the mask array in order to make it fit the image and have my
% circle filter attached to the "middle" of the frequency graph.
maskl=logical(mask);
maskh=~mask;
maskl=double(maskl);
maskh=double(maskh);
% here, i created the high and low pass masks from the user-defined mask.
x=fft2(x);
if u==1
HP=x.*maskh;
out=ifft(HP);
else
LP=x.*maskl;
out=ifft(LP);
end
end
我使用的面膜是一個白色的圓圈上的黑色bacground。我在以下代碼中使用它:
mask=imread('circle.png');
mask=double(mask)/255;
mask=mask(:,:,1);
boat_a=imread('boat.png');
boat_a2=double(boat_a)/255;
c1=hlow2(boat_a2,255,mask,1);
c2=hlow2(boat_a2,255,mask,2);
figure()
imshow(c1)
figure()
imshow(c2)
但是,最終結果完全不是我所期望的!我檢查了圖片頻率曲線圖,他們似乎很好,與放置在它應該是圓形過濾器,但輸出圖像是完全錯誤的。對於高通濾波器,輸出圖像不變。對於低通,它是完全黑色的。我試圖重寫功能幾次,與我乘矩陣,但我的結果是不會改變的方式演奏。
我相信,我失去了一些東西,但我似乎無法找到什麼。請幫助我。