【matlab编程实战】图片二维熵计算

【matlab编程实战】图片二维熵计算

欢迎关注,高强度更新和MATLAB,PYTHON编程,C++编程,算法编程,深度学习,自然语言处理,图像处理,OPENCV等相关知识:)

首先,输入一张lena的图片:
在这里插入图片描述
然后编写下面的代码:

clear all; clc;
%%读取输入图像                                 
im_T = imread('lena_color.png');   
im_T = imresize(im_T,[256 256]);%缩小了下图片,不然速度太慢了
imshow(im_T);
%%输入图像RGB转转化为三通道图像
image = im_T;
ycbcr = rgb2ycbcr(image);  %Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。                                            
y = ycbcr(:, :, 1);

cb = ycbcr(:, :, 2);

cr = ycbcr(:, :, 3);
%初始化
cnt = 0;                                                                   %记录区域块位置
sumend = 0;                                                                %二维信息熵的值
maxcount=0;                                                                %最高频次
center = 0;                                                                %区域块的中心点
average = 0;                                                               %邻域灰度均值
patch_size =5;                                                             %确定区域块大小
[h, w] = size(y);
gridx = 1:1 : w-patch_size+1;  
gridy = 1:1 : h-patch_size+1;
centerpoint = (patch_size^2+1)*0.5;                                        %区域块中心点位置
HP = zeros(patch_size-2, (w-4)*(h-4));                                     %保存中心灰度值 邻域灰度均值 概率 频次
LP = zeros(patch_size-4, (w-4)*(h-4));
%获取每个区域块的中心灰度值、领域灰度均值
for ii = 1:1:length(gridx)                       
    for jj = 1:1:length(gridy)
        cnt = cnt+1;
        yy = gridx(ii);
        xx = gridy(jj);
        mPatch = y(yy:yy+patch_size-1, xx:xx+patch_size-1);          
        mPatch = mPatch(:);
        center = mPatch(centerpoint);
        mPatch(centerpoint) = 0;
        average = sum(mPatch)/(patch_size^2-1);
        HP(:,cnt) = [center,average,0];
    end
end
%获取每个区域块、频次
for ii = 1:1:cnt 
    first = HP(1,ii) ;
    second = HP(2,ii);
    ind = find((HP(1,:) == first) );
    idx = find((HP(2,ind) == second));
    t = length(idx);
    HP(3,ii) = t;
end
%获取最高频次 并创建MP
[B , IX] = sort(HP(3,:),'descend');                                        
maxcount=B(1);
MP = zeros(patch_size-4, maxcount);
for ii = 1:1:maxcount
    ii
    ind = find((HP(3,:) == ii) ); 
    MP(1,ii) = length(ind);
end
%计算二维信息熵 
for ii = 1:1:maxcount;
    ii
    PI = ii/(255*255); 
    sumend = MP(1,ii)*(PI)*log2(PI) + sumend;
end
sumend = -sumend;

fprintf('图片的二维信息熵是 %f dB\n', sumend);


在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞲_大河弯弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值