微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何计算两个方向水平方向和垂直方向的图片熵?

如何解决如何计算两个方向水平方向和垂直方向的图片熵?

我需要计算两个方向(水平方向和垂直方向)的图片熵吗? 如何在matlab上实现它?

解决方法

要编辑:一些可能有用的信息。

使用GLCM(灰度共现矩阵)查找图像的水平和垂直能量

基于与纹理分析相关的注释中发布的文档。为了找到图像的水平和垂直能量,可以从GLCM(灰度共生矩阵)中提取统计信息,特别是在这种情况下为Energy属性。要检查最近邻域/值之间的关系的方向。由于我使用这些功能的知识/经验有限,我建议您更深入地研究这些功能的所有属性。

方向/偏移是一个矢量,定义为: [Vertical_Direction Horizo​​ntal_Direction]

有用的相关MATLAB文档:

MATLAB Documentation: Create gray-level co-occurrence matrix from image

MATLAB Documentation: Texture Analysis Using the Gray-Level Co-Occurrence Matrix (GLCM)

脚本:

%Creating the sample image and plotting%
Sample_Image = imread("Greyscale_Image.png");

%Calculating the Gray-Level Co-Occurence Matrices%
Horizontal_Offset = [0 1];
Vertical_Offset = [1 0];

Horizontal_GLCM = graycomatrix(Sample_Image,'offset',Horizontal_Offset,'Symmetric',true);
Vertical_GLCM = graycomatrix(Sample_Image,Vertical_Offset,true);

Horizontal_Statistics = graycoprops(Horizontal_GLCM);
Horizontal_Statistics.Energy

Vertical_Statistics = graycoprops(Vertical_GLCM);
Vertical_Statistics.Energy

有趣的是,Horizontal_GLCMVertical_GLCM的熵相等

entropy(Horizontal_GLCM)
entropy(Vertical_GLCM)


查找图像的熵(灰度/灰度)

前言:

图像和字符串的熵通常以以下形式定义: Entropy Equations Probability Equation

其中,pi是给定像素强度I的熵概率,H(s)是信号/图像的熵。概率是像素强度/像素数的频率。例如:

Sample Greyscale Image

像素数= 8

像素强度: 20 →频率= 1→概率= 1/8→熵项=-(1/8)×log2(1/8
像素强度: 80 →频率= 3→概率= 3/8→熵项=-({3/8)×log2(3/8
像素强度: 120 →频率= 3→概率= 3/8→熵项=-({3/8)×log2(3/8
像素强度: 160 →频率= 1→概率= 1/8→熵项=-(1/8)×log2(1/8)>

图像熵:

H(s)= [-(1/8)×log2(1/8)] + [-(3/8)×log2(3/8)] + [- (3/8×log2(3/8)] + [-(1/8)×log2(1/8)]

H(s)≈1.811278(基于源编码对图像进行编码需要2位)

脚本:

方法1:使用entropy()函数

entropy()函数返回图像的熵,并为编码图像所需的位数设置下限。更具体地说,Number_Of_Bits_Required = ceil(entropy(image))

%Creating the sample image and plotting%
Sample_Image = uint8([20 80 80 80; 120 120 120 160]);
imshow(Sample_Image,'InitialMagnification',1500);
title("Test Image");
set(gcf,'Position',[100,100,500,400]);
axis on
xlabel('X-Axis'); ylabel('Y-Axis');

Image_Entropy = entropy(Sample_Image);

方法2:使用循环计算

使用循环遍历所有唯一的像素强度。通过使用条件设置的逻辑矩阵并计算该矩阵的总和来对出现次数进行计数。然后通过将出现次数除以像素数来找到概率。然后取概率log2()并将其添加到变量Calculated_Entropy中,该变量将累加/求和对应于每个特定概率的所有熵项。

%Creating the sample image and plotting%
Sample_Image = uint8([20 80 80 80; 120 120 120 160]);
imshow(Sample_Image,400]);
axis on
xlabel('X-Axis'); ylabel('Y-Axis');

%Finding the image dimensions%
[Image_Height,Image_Width] = size(Sample_Image);
Number_Of_Pixels = Image_Height*Image_Width;

%Evaluating the unique intensity values%
Unique_Intensities = unique(Sample_Image);

%Initializing variables for later use%
Number_Of_Unique_Intensities = length(Unique_Intensities);
Probabilities = zeros(Number_Of_Unique_Intensities,1);
Calculated_Entropy = 0;

%Scanning through the unique intensities and evaluating the probabilities%
for Intensity_Index = 1: Number_Of_Unique_Intensities

    %Grabbing a unique intensity value%
    Intensity_Value = Unique_Intensities(Intensity_Index,1);  
    
        %Evaluating the frequency of the unique intensity value%
        Check_Array = (Sample_Image == Intensity_Value);
        Probabilities(Intensity_Index,1) = sum(Check_Array,'all')/Number_Of_Pixels;
        Calculated_Entropy = -Probabilities(Intensity_Index,1)*log2(Probabilities(Intensity_Index,1))+Calculated_Entropy;
        
end

Image_Entropy = entropy(Sample_Image);

fprintf("Calculated entropy: %f\n",Calculated_Entropy);
fprintf("Using the entropy function: %f\n",Image_Entropy);

使用MATLAB R2019b运行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。