0

我正在使用以下代码使用 sobel mask 屏蔽图像。

for i=1:size(C,1)-2
    for j=1:size(C,2)-2
        %Sobel mask for x-direction:
        Gx=((2*C(i+2,j+1)+C(i+2,j)+C(i+2,j+2))-(2*C(i,j+1)+C(i,j)+C(i,j+2)));
        %Sobel mask for y-direction:
        Gy=((2*C(i+1,j+2)+C(i,j+2)+C(i+2,j+2))-(2*C(i+1,j)+C(i,j)+C(i+2,j)));

        %The gradient of the image
        %B(i,j)=abs(Gx)+abs(Gy);
        B(i,j)=sqrt(Gx.^2+Gy.^2);
        direction = atan(Gy./Gx)

    end
end

我的问题是,有时梯度方向值是“NaN”,如何避免呢?

二、如何将梯度方向量化为8个区域并找到图像的特征向量?请有人帮助我。

4

1 回答 1

0

这是实现:

clc;clear;close;

% Read the Image
image=imread('girl.png');
f=rgb2gray(image);

%   Initializations
Gx=zeros(size(f,1),size(f,2));
Gy=zeros(size(f,1),size(f,2));
Theta=zeros(size(f,1),size(f,2));
Edges=zeros(size(f,1),size(f,2));

% Sobel Filtering
for x=2:size(f,1)-2
    for y=2:size(f,2)-2

    Gy(x,y)= ( f(x-1,y+1) + 2*f(x,y+1) + f(x+1,y+1) )...
        -( f(x-1,y-1) + 2*f(x,y-1) + f(x+1,y-1) );

    Gx(x,y)= ( f(x+1,y-1) + 2*f(x+1,y) + f(x+1,y+1) )...
        -( f(x-1,y-1) + 2*f(x-1,y) + f(x-1,y+1) );   

    Theta(x,y)= atan(Gx(x,y)/Gy(x,y));  % Direction

    Edges(x,y)=sqrt( Gx(x,y)^2 + Gy(x,y)^2);

    end
end

结果 :

在此处输入图像描述

于 2017-02-26T15:29:59.677 回答