图像处理大型科普 您所在的位置:网站首页 图像熵越大 图像处理大型科普

图像处理大型科普

2023-12-16 02:34| 来源: 网络整理| 查看: 265

图像处理大型科普—图像信息熵 哪里来的信息熵?

在很多图像处理的过程中,需要判别一个图像的清晰度,和图像分割结果的优劣,于是就引出了信息熵的概念,绝大多数时候,它都被用来作为评价图像的一个量化标准。

某度百科定义如下:

“信息熵这个词是C.E.香农从热力学中借用过来的。热力学中的热熵是表示分子状态混乱程度的物理量。香农用信息熵的概念来描述信源的不确定度。”

或许这句话中唯一能带来一点点信息量的就是一个“熵”字了, 这不禁让我回想起了那年的化学课堂,老师在讲台上提了提裤腰带说道:“熵这个东西吧,我举个栗子你们就很快明白了,假设咱班是一团物质A,隔壁班是一团物质B,熵就是用来形容课堂纪律的,瞧你们一个个坐的稀稀拉拉,左摇右晃,人头攒动,那么这团物质A的熵就会比较大,人家隔壁班一个个端端正正,目不转睛,聚精会神,熵就小得不得了了,简单来说,一团物质内部结构 越乱,熵越大,反之则小。”

那么我大概猜测信息熵就是说一个信息的凌乱程度咯?

于是又在某度上找到了另一版词条:

“熵被用来衡量一个随机变量出现的期望值。它代表了在被接收之前,信号传输过程中损失的信息量,又被称为信息熵”

(哎~必须得吐槽一下,百度百科的死板程度堪比教科书,感觉怎么让人懵逼怎么写。。。) 不过上述很关键的一句话是,熵被用来一个随机变量出现的期望值,对于一张图片来说,这个随机的变量就是指得图片中每一个位置的像素值(什么,你说RGB有三个值?我们讨论的是灰度图好咩~~)。

实际上,通过求信息熵的过程去理解会更简单。铺出在网上找到一段求信息熵的代码(C++):

double Entropy(Mat img) { //开辟内存 double temp[256] = { 0.0 }; // 计算每个像素的累积值 for (int m = 0; m < img.rows; m++) {// 有效访问行列的方式 const uchar* t = img.ptr(m); for (int n = 0; n < img.cols; n++) { int i = t[n]; temp[i] = temp[i] + 1; } } // 计算每个像素的概率 for (int i = 0; i < 256; i++) { temp[i] = temp[i] / (img.rows*img.cols); } double result = 0; // 计算图像信息熵 for (int i = 0; i < 256; i++) { if (temp[i] == 0.0) result = result; else result = result - temp[i] * (log(temp[i]) / log(2.0)); } return result; }

对应的matlab代码:

function [res] = ImgEntropy(I) %求图像熵值 %传入一张彩色图片的矩阵 %输出图片的图像熵值 I_gray = rgb2gray(I); [ROW,COL] = size(I_gray); %% %新建一个size =256的矩阵,用于统计256个灰度值的出现次数 temp = zeros(256); for i= 1:ROW for j = 1:COL %统计当前灰度出现的次数 temp(I_gray(i,j)+1)= temp(I_gray(i,j)+1)+1; end end %% res = 0.0 ; for i = 1:256 %计算当前灰度值出现的概率 temp(i) = temp(i)/(ROW*COL); %如果当前灰度值出现的次数不为0 if temp(i)~=0.0 res = res - temp(i) * (log(temp(i)) / log(2.0)); end end disp(res); end

文中代码相当于做了三件事情:

便利整个图像矩阵,获取每一个出现灰度值求得每个灰度值在图像矩阵中出现的概率

根据一定得计算方式,统计灰度值的总期望

我们尝试把若干张图片带入这个过程

第一张图片为全白 (白到连边框都没有一个~~), 计算后灰度值期望为0

(图1)

第二张为全黑,灰度值期望同样为0

(图2) 第三张为黑白相间,灰度值期望大于0

(图3)

再来一张更加密集的黑白相间图,期望值更大了

(图4)

结果图(分别对应1、2、3、4图):

So,对于人来说,一张黑色的图和一张白色的图的信息量是一样大,我们只能获取到它的颜色信息,

第三张中添加了黑白相间的风格,我们看见了黑白两种颜色,还可以观察出黑色和白色的间距,黑色的出现规律

相比第一第二张图,它携带的信息量更加大了。

在生活中,同样只有黑白两种颜色的就数二维码最有代表性了,你能想象只有四个格子的二维码么?一个格子有两种颜色,分别代表0和1,那么这种二维码量化后的取值范围就是0000~1111,也就是4个bit的,这也就代表着这张二维码可携带的信息量是4个bit,所以通常情况下,我们见不到这样的二维码,it’s too small to save information…

当二维码的格子数不断增加,所携带的信息量也不断增加,简单来说,二维码的格子数,这意味着二维码的信息量。

这就是二维码的信息熵

以上都是铺垫,至少现在我们能理解黑白图的信息量问题了,摘掉色弱眼镜,接下来进入彩色的世界

这是单反相机拍摄的一张照片,

(图5)

这是用手机拍的一张

(图6)

哪个看起来更加清楚,更加有意境?

实际上人的眼睛是一个带了各种逆天算法并且跑在一台生物超算(大脑)上超级摄像头

只用一瞬间,我们就能提取出物体的结构信息,并判断出那张图片更加优雅,更加好看,更加清晰。

肉眼观察很明显,单反的照片过渡更加自然,物体的颜色更加饱满丰富。

结论毋庸置疑:图5比图6更加清楚。

计算机又是如何理解?

接下来我们来测量他们的信息熵,为了排除像素数量对结果的影响,我们把图片缩放到相同大小,然后按照上述的算法跑值:

结果如上

在计算机中,色彩表现为数字,那么色彩的丰富度就可以用概率来量化,如果每个像素值出现的概率都不为零,我们就有理由相信这是一张颜色艳丽的照片,而这个概率最终的量化结果,又恰恰就是信息熵所拟合的值。

计算机:像素值概率分布均衡==色彩艳丽

人眼: 色彩艳丽==轮廓清楚==清楚

所以我们可以认为,熵值大==色彩艳丽

甚至某些情况下,熵值大==色彩艳丽==图像轮廓清楚==清楚

信息熵更大的作用

要让 “熵值大==色彩艳丽==图像轮廓清楚==清楚 ” 成立

那么只需要满足 “色彩艳丽==轮廓清楚” 就可以成立

哈,巧了,有一种情况刚好能满足这个条件 ———— 光学对焦

想必大家应该都有使用显微镜的经历,如果焦距没调准,就只能看到一片白色

当粗略的找到物体的成像时,再慢慢扭动细准焦微调焦距,物体才慢慢变得轮廓清晰。

细心的同学很容易发现,整个过程的色彩丰富度和轮廓的清晰度是成正比的有没有?

所以当前情况下,我们完全可以通过画面的熵值来衡量画面的清晰度,以此来判断焦距的走向。。。

没错,电动显微镜(注意不是电子显微镜哈)的自动对焦就是这样实现的(亲测很有效,并且计算量很小哦~)

over


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有