【问题标题】:find gradient using sobel mask operator in matlab在matlab中使用sobel掩码算子找到梯度
【发布时间】:2017-07-16 06:42:51
【问题描述】:

我正在使用以下代码使用 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)+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个区域并找到图像的特征向量?请有人帮助我。

【问题讨论】:

  • 你为什么不使用 BW = edge(I,'Sobel') ?就是这么简单。二、你要实现HOG算法吗?
  • 使用索贝尔技术我会得到方向。使用这个我终于想要特征向量那么我怎么能得到

标签: matlab gradient quantization handwriting-recognition sobel


【解决方案1】:

这里是实现:

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

结果:

【讨论】:

  • 没关系,谢谢。但我想要使用方向和幅度的特征向量,以便我可以将其用于监督学习。请告诉我如何获取特征向量?
  • 您需要的是 HOG 描述符,您必须为每个细胞创建一个方向直方图,并将其传递给多层神经网络进行训练。阅读此users.utcluj.ro/~raluca/prs/prs_lab_05e.pdf 以了解步骤!
猜你喜欢
  • 2014-04-18
  • 2018-05-05
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
相关资源
最近更新 更多