【问题标题】:Image Processing using Gabor Filter使用 Gabor 滤波器的图像处理
【发布时间】:2016-04-19 19:17:43
【问题描述】:

我正在尝试对图像执行 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.

不知道怎么解决...

【问题讨论】:

  • 什么是“J”?请记住,conv2 将在此处返回一个矩阵,但您试图将其存储在 J(i,j) 中。

标签: matlab


【解决方案1】:

您在K = exp(2*pi*theta*i(xprime+ yprime)); 中的i 和括号之间缺少*。你喜欢的应该是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));

【讨论】:

  • 首先感谢您的回复。但在我更正之后,我又犯了一个错误。 ???下标分配尺寸不匹配。有什么想法吗?
  • 再次感谢。但现在我得到一个黑色图像作为输出。我根本没有任何 gabor 功能......
  • 具有 gabor 特征的图像。
  • Gabor 特征是什么意思?你有你正在写的书或论文的链接吗?
【解决方案2】:

根据上面的答案,最终的代码是:

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))

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2018-12-11
    • 2011-07-04
    相关资源
    最近更新 更多