2016-11-16 124 views
-4

我是MATLAB新手,我試圖將高通butterworth濾波器應用於我的數據圖像。我收到以下錯誤:錯誤使用。*矩陣尺寸必須一致?

Error using `.*` Matrix dimensions must agree. 

這裏是我的代碼:

function[]=Preprocessing() 
I = imread('Photo0029.jpg'); 
imshow(I); 
imDouble=im2double(I); 
fftlogim=fft(log(imDouble+0.01)) 
f=butterhp(I,15,1); 
c=fftlogim.*f; 
h=real(ifft(c)); 
figure,ishow(h); 
h1=exp(h); 
ifftshow(h1); 

和這裏的butterhp功能:

function[out]=butterhp(im,d,n) 
h=size(im,1); 
w=size(im,2); 
[x,y]=meshgrid(-floor(w/2):floor(w-1)/2,-floor(h/2):floor(h-1)/2); 
out=1./(1.+(d./(x.^2+y.^2).^0.5).^(2*n)); 
end 

誰能幫助我解決這個問題?

+2

您應該在帖子中設置您的代碼的格式,以便閱讀和理解。 –

+1

簡單:您的矩陣尺寸不相等。嘗試乘以兩個相等大小的矩陣。另外:這個標題還有幾個問題,如果沒有系統說明,我不能從中刪除MATLAB。請先搜索。 – Adriaan

+0

讓我猜,你的照片是RGB?你需要保持它在RGB,或正在處理它的灰度好嗎? – hbaderts

回答

0

隨着你的輸入圖像I是彩色圖像(RGB),數組I是三維的:width -by- height -by- 3,因爲每個像素需要三個值:紅,綠,藍色。然而,butterhp的輸出始終是width-by-height,因此您試圖將2D陣列乘以3D陣列,當然這不會成功。

通常情況下,灰度處理速度更快,並取得相當好的結果。要做到這一點,將圖像轉換使用rgb2gray加載後爲灰度:

imGrayScale = rgb2gray(I); 

如果希望每個顏色通道獨立與RGB和處理堅持,你可以通過bsxfun,它適用逐元素操作更換您的乘法(這裏:@times,即元素方式乘法)到fftlogimf的所有元素,但是「隱式擴展維度」。這意味着w -by- h -by- 1矩陣被自動轉換爲w -by- h -by- 3這樣兩個陣列可以成倍增加。

c = bsxfun(@times, fftlogim, f); 
+0

謝謝!我已經解決了這個問題。我分割了RGB通道並單獨地倍增。再次感謝 ! – Sultan

相關問題