matlab中sobel掩模算子求梯度

matlab中sobel掩模算子求梯度,matlab,gradient,quantization,handwriting-recognition,sobel,Matlab,Gradient,Quantization,Handwriting Recognition,Sobel,我使用下面的代码来遮罩图像使用索贝尔面具 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

我使用下面的代码来遮罩图像使用索贝尔面具

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”,如何避免它


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

以下是实现:

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
结果:


为什么不使用BW=edge(I,'Sobel')??这很简单。第二,你想实现HOG算法吗?使用sobel技术我会得到方向。使用这个,我最终想要特征向量,那么我怎么才能得到呢?这没问题,谢谢你。但是我想要使用方向和大小的特征向量,这样我就可以用它进行监督学习。请告诉我如何得到特征向量?你需要的是一个HOG描述符,你必须为每个细胞创建一个方向直方图,并将其传递给多层神经网络进行训练。阅读此文以了解步骤!!