图像中梯度的取值范围大概是多少?能够有大神给个求边缘梯度方向直方图的matlab代码 谢谢

如题
2025-02-07 12:40:59
推荐回答(1个)
回答1:

f=imread('buiding_blur.jpg');

if size(f,3) == 3
f_gray = rgb2gray(f);
else
f_gray = f;
end
f_gray=double(f_gray);

kx = [-1 1; 0 0];
ky = [-1 0; 1 0];

f_grad_x=conv2(f_gray,kx,'valid');%水平方向梯度
f_grad_y=conv2(f_gray,ky,'valid');%垂直方向梯度
% g=sqrt(f_grad_x.^2+f_grad_y.^2);

Ix=f_grad_x;
Value=unique(Ix(:));
Count=[hist(Ix(:),Value)]';
s=sum(Count(:));
count1=log2(Count/s);%length(Ix));
figure,plot(Value,count1);
axis([-200 200 -18 0]);
% % title('Heavy-tailed distribution on image gradients');
% % xlabel('Gradient');
% % ylabel('Log2 probability density');
% % grid on
% hold on
%
% f_blur_x=conv2(f_blur,kx,'valid');%水平方向梯度
% f_blur_y=conv2(f_blur,ky,'valid');%垂直方向梯度
% % g=sqrt(f_grad_x.^2+f_grad_y.^2);
%
% Ix=f_blur_x;
% Value=unique(Ix(:));
% Count=[hist(Ix(:),Value)]';
% s=sum(Count(:));
% count1=log2(Count/s);%length(Ix));
% plot(Value,count1,'r-');
% axis([-200 200 -18 0]);

% title('Heavy-tailed distribution on image gradients');
% xlabel('Gradient');
% ylabel('Log2 probability density');
% grid on

% Ix=f_grad_x;
% Value=unique(Ix(:));
% Count=[hist(Ix(:),Value)]';
% count1=log2(Count/length(f_grad_x));
% figure,plot(Value,count1);
% axis([-150 150 -18 10]);
% title('水平方向梯度概率分布图');
%
% Iy=f_grad_y;
% Value=unique(Iy(:));
% Count=[hist(Iy(:),Value)]';
% count1=log2(Count/length(f_grad_y));
% figure,plot(Value,count1);
% axis([-150 150 -18 10]);
% title('垂直方向梯度概率分布图');

自己体会吧,肯定能用,改一下图片