2017-02-25 55 views
0

我使用下面的代码来使用索贝尔掩模来掩盖图像。在MATLAB中使用索贝尔掩模运算符找到梯度

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

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

+0

你为什么不使用BW =边缘(I, '索贝尔')?它非常简单。其次,你想实现HOG算法吗? –

+0

使用索贝尔技术,我会得到方向。使用这个我最后想要的特征向量,然后我怎么能得到 –

回答

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 

结果:

enter image description here

+0

这是好的谢谢你this.But我想使用方向和大小的特征向量,以便我可以使用监督learning.Please告诉我如何获得特征向量? –

+0

您需要的是一个HOG描述符,您必须为每个单元格创建一个方向直方图,并将其传递到多层神经网络进行训练。阅读这个http://users.utcluj.ro/~raluca/prs/prs_lab_05e.pdf了解步骤! –