Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 面向边缘直方图的实现_Matlab_Image Processing_Histogram_Edge Detection_Sobel - Fatal编程技术网

Matlab 面向边缘直方图的实现

Matlab 面向边缘直方图的实现,matlab,image-processing,histogram,edge-detection,sobel,Matlab,Image Processing,Histogram,Edge Detection,Sobel,我正在尝试实现面向边缘的直方图:但代码中有一个问题,我无法找出val=fix((角度(I,j)-a_min)/(BinSize))+1正在变南 我要8个箱子。 1.首先,我用索贝尔算子求梯度和角度。 2.后来我有8个箱子(-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,

我正在尝试实现面向边缘的直方图:但代码中有一个问题,我无法找出
val=fix((角度(I,j)-a_min)/(BinSize))+1正在变南

我要8个箱子。 1.首先,我用索贝尔算子求梯度和角度。 2.后来我有8个箱子(-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
im=imread('cameran.tif');
子批次(2,2,1);imshow(im);
im=im2倍(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);
子批次(2,2,2);imshow(im_x);
子批次(2,2,3);imshow(imu y);
im_边=零(大小(im));
角度=零(尺寸(im));
[rc]=尺寸(im);
对于i=1:r
对于j=1:c
im_边(i,j)=sqrt(im_x(i,j)^2+imu y(i,j)^2);
角度(i,j)=atan(im_y(i,j)/im_x(i,j));%角度为-pi/2至pi/2
结束
结束
子批次(2,2,4);imshow(imu-edge,[]);
im_温度=im2bw(im_边缘,80/255);
图();子批次(1,2,1);imshow(im_temp);
子批次(1,2,2);imshow(角度,[]);
%计算直方图
无垃圾箱=8个;
H=零(1,无容器);
BinSize=pi/无bins;
a_min=-pi/2;
对于i=1:r
对于j=1:c
val=固定((角度(i,j)-a_min)/(b尺寸))+1;
如果(val>8)
val=8;
结束
如果(val实现此
角度(i,j)=atan(im_y(i,j)/im_x(i,j));%角度是-pi/2到pi/2
在某些像素中返回Nan值。您应该尝试提取边缘像素处的边缘方向