根据灰度动态范围将图像分类为褪色或不褪色?
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 及以上值的图像被认为是机器可读的。如果值低于阈值,则丢弃图像。
【讨论】:
以上是关于根据灰度动态范围将图像分类为褪色或不褪色?的主要内容,如果未能解决你的问题,请参考以下文章