Обработка изображений с использованием Gabor Filter - PullRequest
4 голосов
/ 14 сентября 2011

Я пытаюсь выполнить фильтр Габора для изображений.

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

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Вам не хватает * в 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));
0 голосов
/ 04 ноября 2013

Согласно ответам выше, окончательный код:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...