matlab图像二维熵 代码

function [ent]  = gray2hist(img,N)
% 求灰度图二维信息熵
% img 输入灰度图
% N 邻域范围
[m,n] =size(img);
gray_v = double(imresize(img,[m*n,1])); %获取各像素点对应的灰度序列
% 定义均值滤波器
h = fspecial('average', [N N]);
% 对图像进行均值滤波
img_filted = imfilter(img, h);
mean_v = double(imresize(img_filted,[m*n,1]));%获取各像素点对应的邻域灰度均值序列

mean_gray = [mean_v,gray_v];% 两序列组合后,采用hist3获取二维直方图
[N,X]  = hist3(mean_gray,'Nbins',[256 256]);%限制横纵坐标分为256% N = N./2;
N_nor = N./(sum(N(:)));%获取各个(灰度值,灰度均值)对应在整个图像中的占比
figure;
mesh(N_nor) %显示二维直方图
xlabel('邻域灰度均值')
ylabel('灰度值')
zlabel('占比')
xlim([0,256])
ylim([0,256])

N_v = (find(N_nor>0)); % 获取二维直方图中占比不为0的部分,为0的不考虑
a = N_nor(N_v);% 获取二维直方图中占比不为0的部分对应的占比
% b = log(a);% 获取二维直方图中占比不为0的部分对应占比的log值,log 10 
b = log2(a);% 获取二维直方图中占比不为0的部分对应占比的log值,log 2 
N_temp =-(a.*b); % 相乘后累加取负
ent = sum(N_temp);
% N_nor(N_v) = N_temp; %将二维直方图占比不为0的部分占比,替换为占比与log(占比)的乘积
% figure 
% mesh(N_nor)%显示替换后的二维直方图

end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值