我正试图实现面向边缘的直方图:但是在代码中有一个问题,我无法找出val=fix((angles(i,j)-a_min)/(BinSize))+1;
的去向
我取8个箱子。1. 首先,我用sobel算子找到梯度和角度。2. 后来我有8个bin (-pi/2到pi/2,因为atan返回这两个值之间的值),我根据角度开始梯度幅度。
im=imread('cameraman.tif');
subplot(2,2,1);imshow(im);
im=im2double(im);
sob_x=[-1,0,1;-2,0,2;-1,0,1];
sob_y=[1,2,1;0,0,0;-1,-2,-1];
im_x=imfilter(im,sob_x);
im_y=imfilter(im,sob_y);
subplot(2,2,2);imshow(im_x);
subplot(2,2,3);imshow(im_y);
im_edge=zeros(size(im));
angles=zeros(size(im));
[r c]=size(im);
for i=1:r
for j=1:c
im_edge(i,j)=sqrt(im_x(i,j)^2+im_y(i,j)^2);
angles(i,j)=atan(im_y(i,j)/im_x(i,j));%angles are -pi/2 to pi/2
end
end
subplot(2,2,4);imshow(im_edge,[]);
im_temp=im2bw(im_edge,80/255);
figure();subplot(1,2,1);imshow(im_temp);
subplot(1,2,2);imshow(angles,[]);
%calculating the histogram
No_bins=8;
H=zeros(1,No_bins);
BinSize=pi/No_bins;
a_min=-pi/2;
for i=1:r
for j=1:c
val=fix((angles(i,j)-a_min)/(BinSize))+1;
if (val>8)
val=8;
end
if(val<1)
val=1;
end
H(1,val)=H(1,val)+im_edge(i,j);
end
end
H
这个的实现angles(i,j)=atan(im_y(i,j)/im_x(i,j));%angles are -pi/2 to pi/2
返回一些像素的Nan值。您应该尝试提取边缘像素的边缘方向。