根据灰度动态范围将图像分类为褪色或不褪色?

Posted

技术标签:

【中文标题】根据灰度动态范围将图像分类为褪色或不褪色?【英文标题】:Classify image as washed-out or not based on the grayscale dynamic range? 【发布时间】:2018-12-21 05:26:50 【问题描述】:

我正在尝试在 Python 的 OpenCV 上重新创建一个算法(来自 publication),以检测图像是否具有褪色效果。

论文陈述如下:

“褪色图像的动态范围缩小(在灰度 图像)相对于具有自然色彩的图像。合规性 分数只是通过重新调整动态范围来计算 灰度图像到 [0;100]"

问题是,我不明白什么是灰度动态范围。

这是关于计算灰度图像 [0-255] 的最小和最大像素值之间的差异并将该值重新缩放到 [0-100] 的范围吗?

【问题讨论】:

是的,动态范围是最大值和最小值的差值。引用可能遗漏了一些信息,因为简单地缩放图像的强度值不会给你分数,还必须做其他事情。 可能:例如:如果您的范围是 0..255 => gdr=255,那么您的得分是 100。对于 80..173 => gdr=93 的范围,您的得分是 93*100 /255=36.47 但这只是我的直觉,没有读过论文;) 【参考方案1】:

我在 researchgate.com 上找到了这篇论文。该论文讨论了人脸图像必须通过的各种标准才能被标记为机器可读。因为与人类不同的机器无法理解光照、遮挡、姿势差异等各种条件下的人脸图像。除了问题中的陈述之外,关于 ICAO 13 的信息并不多。所以我推测它会是以下方式。

根据 ICAO 13 将灰度图像转换为动态范围可以通过以下方式完成:

我从 OpenCV 文档中获取了一个示例图像来说明这一点:

代码:

import cv2
import numpy as np

img = cv2.imread(path + 'wiki.jpg', 0)

print(((np.max(img) - np.min(img)) * 100) / 255)
cv2.imshow(path + 'normal.jpg', img)

equ = cv2.equalizeHist(img)
print(((np.max(equ) - np.min(equ)) * 100) / 255)
cv2.imshow(path + 'equalized.jpg', equ)

结果:

 Dynamic range of original image : 36
 Dynamic range of equalized image : 100

原图:

均衡图像:

现在,由于您的值介于 0 到 100 之间,您可以选择一个阈值(例如 85) 并说具有 85 及以上值的图像被认为是机器可读的。如果值低于阈值,则丢弃图像。

【讨论】:

以上是关于根据灰度动态范围将图像分类为褪色或不褪色?的主要内容,如果未能解决你的问题,请参考以下文章

IE 褪色导致图像出现白点

基于阈值的7种图像分割方法以及Python实现

MMX:褪色两个图像结果

scss 懒惰褪色光滑滑块背景图像

基本JavaScript图像褪色

可拖动项目褪色和丑陋