使用Gabor滤波器的图像处理
我想对图像执行gabor滤镜。使用Gabor滤波器的图像处理
%% 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.
不知道如何解决这个问题?
你缺少i
和括号之间K = exp(2*pi*theta*i(xprime+ yprime));
一个*
。你应该是K = exp(2*pi*theta*i*(xprime+ yprime));
。正是由于这种情况,Mathworks建议使用sqrt(-1)
作为虚数。
更新: 你不需要循环在Matlab中进行卷积。你干脆说J=conv2(I2,G);
更新2:
这里的工作代码
%% 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));
首先感谢回复。但在我纠正后,我有另一个错误。 ???下标分配尺寸不匹配。 有什么想法? –
更新了我的回复。 – Phonon
再次感谢。但现在我得到一个黑色的图像作为输出。我完全可以得到任何gabor功能...... –
根据以上问题的答案,最终的代码之中:
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))
什么是 “J”?记住conv2会在这里返回一个矩阵,但是你试图把它存储在J(i,j)中。 – Vidar