我读过一篇博客 图像增强的直方图均衡 它给出了将普通图像转换为 HDR 图像的 7 个步骤(下图)。据说,用于直方图均衡的C/C++程序可以使用Open Computer Vision Library或OpenCV轻松编写。此类计划的主要步骤包括:
-
读取输入图像。由于OpenCV,这几乎可以是任何图像格式。此输入图像包含
n
像素:n = height × width
-
从RGB(由OpenCV以蓝色,绿色,红色的顺序存储)转换为HSV:色调,饱和度和值。
-
计算输入图像的直方图。这是一个 256 值数组,其中
H[x]
包含值为x
的像素数。 -
计算直方图的累积密度函数。这是一个 256 值数组,其中
cdf[x]
包含值为x
或更小的像素数:cdf[x] = H[0] + H[1] + H[2] + ... + H[x]
-
遍历整个图像中的
n
像素,并替换每个i
点的值:V[i] <-- floor(255*(cdf[V[i]] - cdf[0])/(n - cdf[0]))
-
将图像从HSV转换回RGB。
-
以所需的格式和文件名保存图像。
在第 3 步,我不明白H[x]
是什么?x
是指 R、G、B 或 H、S 或 V 值吗?另外,在步骤5中,值的含义i
?
第一个问题:
H(x) 是图像的直方图。
强度水平在 [0, 255] 范围内的数字图像的直方图是一个离散函数 h(r_k) = n_k,其中 r_k 是第 k 个强度值,n_k 是图像中具有强度r_k的像素数。
来自:冈萨雷斯/伍兹的数字图像处理第三版,第120页
第二个问题:我是什么?
i 是遍历图片的变量。