2011-09-14 15 views
4

画像にガボールフィルタを実行しようとしています。ガボールフィルタを使用した画像処理

%% Read 

clear all; 
close all; 
clc; 
I=imread('test.png'); 
imshow(I); 

%% Crop 
I2 = imcrop(I); 
figure, imshow(I2) 
m=size(I2,1); 
n=size(I2,2); 
%% Gabor 
phi = 7*pi/8; 
theta = 2; 
sigma = 0.65*theta; 
for i=1:3 
    for j=1:3 
     xprime= j*cos(phi); 
     yprime= i*sin(phi); 
     K = exp(2*pi*theta*i(xprime+ yprime)); 
     G= exp(-(i.^2+j.^2)/(sigma^2)).*abs(K); 
    end 
end 

%% Convolve 

for i=1:m 
    for j=1:n 
     J(i,j)=conv2(I2,G); 
    end 
end 
imshow(uint8(J)) 

このエラーは常に発生しています。

??? Subscript indices must either be real positive integers or logicals. 

ないこの問題を解決する方法がわから... enter image description here

enter image description here

+0

"J" は何ですか? conv2はここで行列を返しますが、J(i、j)の中に格納しようとしていることに注意してください。 – Vidar

答えて

4

あなたはiと括弧の間K = exp(2*pi*theta*i(xprime+ yprime));*が欠落しています。あなたはK = exp(2*pi*theta*i*(xprime+ yprime));であるべきです。このような場合、Mathworksは虚数にsqrt(-1)を使用することを推奨しています。

更新: Matlabで畳み込みを行うためのループは必要ありません。あなたは、単にアップデート2 J=conv2(I2,G);

を言う:

ここで作業コードは、上記の回答によると

最終的なコードのビーイング
%% Gabor 
phi = 7*pi/8; 
theta = 2; 
sigma = 0.65*theta; 
filterSize = 6; 

G = zeros(filterSize); 


for i=(0:filterSize-1)/filterSize 
    for j=(0:filterSize-/filterSize 
     xprime= j*cos(phi); 
     yprime= i*sin(phi); 
     K = exp(2*pi*theta*sqrt(-1)*(xprime+ yprime)); 
     G(round((i+1)*filterSize),round((j+1)*filterSize)) = exp(-(i^2+j^2)/(sigma^2))*K; 
    end 
end 

%% Convolve 

J = conv2(I2,G); 
imshow(imag(J)); 
+0

最初にお返事ありがとうございます。私は別のエラーがあったことを訂正した後。 ???添字付きのディメンションの不一致。 –

+0

私の返信を更新しました。 – Phonon

+0

もう一度感謝します。しかし今は出力として黒い画像が得られます。私はすべてのガボールの機能を手に入れませんでした... –

0

です:

clear all; 
close all; 
clc; 
I=imread('test.png'); 
imshow(I); 

%% Crop 
I2 = imcrop(I); 
figure, imshow(I2) 

    phi = 7*pi/8; 
    theta = 2; 
    sigma = 0.65*theta; 
    filterSize = 6; 

    G = zeros(filterSize); 

    for i=(0:filterSize-1)/filterSize 
     for j=(0:filterSize-1)/filterSize 
      xprime= j*cos(phi); 
      yprime= i*sin(phi); 
      K = exp(2*pi*theta*sqrt(-1)*(xprime+ yprime)); 
      G(round((i+1)*filterSize),round((j+1)*filterSize)) = exp(-(i^2+j^2)/(sigma^2))*K; 
     end 
    end 

    J = conv2(I,G); 
    figure(2); 
    imagesc(imag(J))