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