在上一篇文章中,我们讨论了这一点均衡化图像直方图可以提高它的对比度。在这里,我们将更详细地研究这项技术。
首先,我们将研究一个简单的示例。然后,我们将尝试发展直觉,如何映射函数的这种技术的直方图平坦化。最后,我们将简要讨论直方图均衡化方法的电路实现。
使用映射函数均衡直方图
假设像素值x出现的次数K.在输入图像中是nK.(如图1所示)。
图1
为了平衡这个直方图,我们应该映射像素值xK.由以下等式给出的Y:
\ [y = f (xk) = (l - 1) \ sum_ j = {0} ^ k \压裂{n_j} {N} \]
方程1
其中L是可能的灰度级别的总数(例如,8位图像的L = 256),n是图像中的总像素数。求和项\(\ left(\ sum_ {j = 0} ^ k \ frac {n_j} {n} \ oled)\)是灰色值在零和x之间的累积像素数K.。
该术语有时被称为“累积标准化图像直方图”。让我们来看看一个简单的例子。
A映射函数示例
考虑一个总计为64⨉64像素的3位图像。假设该图像的直方图如图2所示。
图2.
如您所见,存在的像素值比其他像素值要小得多。像素值分别在表1的第二列和第三列中给出了像素值及其次数。
K. | XK. | N.K. | y = f(xk) (从等式1) |
y = f(xK.) (舍入后) |
0. | 0. | 40 | 0.0684 | 0. |
1 | 1 | 80 | 0.2051 | 0. |
2 | 2 | One hundred. | 0.3760 | 0. |
3. | 3. | 2000年 | 3.7939 | 4. |
4. | 4. | 1000 | 5.5029 | 6. |
5. | 5. | 756. | 6.7949 | 7. |
6. | 6. | 80 | 6.9316 | 7. |
7. | 7. | 40 | 7. | 7. |
表格1
让我们将公式1的映射函数应用于此示例。利用3位图像,有八个不同的像素值,即L.= 23.。替代L = 8和N= 64 x 64 = 4096进入等式1,找到输出像素值y = f(xK.),以获取给定的输入像素值xK.如表的第四列所示。例如,x的映射函数的输出4.= 4可以发现\ (y = f (x_4) = 7 \ * \ sum_ j ={0} ^ 4 \压裂{n_j}{4096} = \压裂{7}{4096}\倍(40 + 80 + 100 + 2000 + 1000)= 5.5029 \)。
由于像素值应该是整数,因此我们可以将其转到6(表的最后一列)。我们可以以类似的方式找到此映射函数的其他输出值。
所获得的直方图如图3所示。
图3.
在此示例中,一些频繁的像素值(例如x)K.= 0,1和2,被映射到单个输出值(y = 0)。这在像素值为零的相对较大的箱子。但是,频繁的像素值,例如xK.=3,被映射到一个没有其他输入值映射到的值(y=4)。正因为如此,直方图的箱子变得相对均衡。
但是,这并不意味着,我们将在均衡的箱子里所有像素值。例如,图3中的直方图显示,像素值为1时的bin高度实际上从80降到了0。因此,当我们使用直方图均衡化技术时,可能会使原始直方图中的一些箱子消失,以均衡化其他箱子。
累积映射如何执行直方图均衡?
方程1的数学推导可以在课本中找到(参见3.4.4节)数字图像处理的基础由克里斯·所罗门)。
在本文中,我们将尝试更直观地解释该传输函数如何执行直方图均衡。与教科书的数学分析一样,我们首先假设像素值是连续变量,并使用结果来解释离散情况。
一个连续的情况下
考虑如图4所示的示例功能。在该图中,像素值是连续变量,其范围为0到L-1。
图4.
我们需要找到一个映射函数,它将上述功能转换为均匀函数,如图5所示。假设像素总数是n,则均衡函数的值应该是\(\ frac {n} {l-1} \)。
这是由于连续情况下函数的积分\(\左(\ frac {n} {l-1} \ times(l-1)\右)\)可以被视为总数像素。在离散情况下,积分变为显然给出了像素总数的不同像素值的计数的求和。
图5.
原始功能有三个不同的像素值范围,由r表示1, R2和r.3.与h值1h2和h.3.,分别。范围R1, R2和r.3.映射到r1, r2和r.3.在图5中。让我们考虑r的范围1。
该范围内的功能面积(h1R.1)表示0到x之间值的像素数1。所有这些像素都应该映射到范围r1因此,我们获得具有值\(\ frac {n} {l-1} \)的扁平函数(图5)。由于范围r中的像素总数1与r中的像素数相同1,地区h1R.1应该等于范围内的新功能区域1。因此,我们有:
\ [h_1r_1 = \ frac {n} {l-1} r_1 \]
这给了:
\ [r_1 = \压裂{l - 1} {N} h_1R_1 \]
方程2
上面的公式指定了输入像素值在范围R中的范围1将被映射。可以为从0到X的任何子范围导出类似的等式,其中x小于或等于R1。因此,对于\(X \ LEQ r_1 \),输入像素值x应映射到以下等式给出的像素值y:
\ [y = \ frac {l-1} {n} h_1x \; \; \; \; \;X \ LEQ R_1 \]
方程3
该方程扩展了驻留在范围内的原始函数的像素值1在范围内1因此,输出函数的值是\(\ frac {n} {l-1} \)。
类似地,范围r的像素2应该映射到范围r2具有\(\ frac {n} {l-1} \)的函数值(图5)。由于像素数量是固定的,我们有:
\ [h_2r_2 = \ frac {n} {l-1} r_2 \]
这给了:
\ [r_2 = \ frac {l-1} {n} h_2r_2 \]
方程4
同样,我们可以对上面的方程进行修改,得到一个对R的任意子范围有效的方程2。对于\(X_1 \ [y = r_1 + \ frac {l-1} {n} h_2x \] 上述等式的第一项考虑到范围r1已经映射到r1。第二项由方程4推导而来。代入r的值1从等式2提供: \ [y = \压裂{l - 1} {N} h_1R_1 + \压裂{l - 1} {N} h_2x = \压裂{l - 1} {N} (h_1R_1 + h_2x) \;\;For \;x_1< x\leq x_2\] 类似地,对于\(X_2 \ [y = \ frac {l-1} {n} h_1r_1 + \ frac {l-1} {n} h_2r_2 + \ frac {l-1} {n} h_3x = \ frac {l-1} {n}(h_1r_1+ h_2r_2 + h_3x)\;\;for \; X_1 为了总结,根据等式3,5和6,我们可以通过计算从0到x的原始函数的积分来找到给定输入像素值x的输出像素值,并将结果乘以\(\ frac {l-1} {n} \)。以上讨论对于图4中描绘的示例功能有效。 我们可以将此结果扩展到任意功能吗? 请注意,我们可以使用楼梯功能来实现实际兴趣的函数(见图6)。因此,上述结果可以扩展到其他功能类型。 因此,为了找到一个输入像素值x的均衡函数的输出,我们将原始函数H(x)从0到x积分,并将结果乘以\(\frac {L-1}{N}\): \ [y = f (x) = \压裂{(l - 1)} {N} \ int_0 ^ xH (t) dt \] 其中t是一个钝眼的集成变量。 实数图像中的强度值取决于离散值。在这种情况下,应用像素计数上的求和替换等式7中的积分。这为我们提供了我们在本文的第一个部分引入的等式: \ [y = f(x)= \ frac {(l-1)} {n} \ sum_ {j = 0} ^ xn_j \] 值得注意的是,与连续变换不同,离散映射不能产生完美的均衡输出。例如,图3中的均衡化直方图有一些高度为零的箱子。虽然离散逼近不能产生完美的均衡输出,但仍然可以得到更平坦的直方图,提高图像的对比度。 在本节中,我们将简要介绍直方图均衡技术的电路实现。我们需要获得图像直方图并使用它来找到等式1的映射函数。图7中示出了用于获得图像直方图的简化框图。 存储器用于存储图像直方图。在此实现中,我们假设输入是灰度八位图像大小256÷256像素。八位图像具有256个不同的像素值。因此,存储器应具有256行来存储不同像素值的计数。每行内存中需要多少位?像素总数为256÷256 = 216.。 因此,我们需要256✕16位内存来存储最坏情况下的数据,其中图像的所有像素都具有相同的值。 最初,存储器被复位(所有像素值的初始计数为零)。然后,将输入图像的像素值逐个应用于存储器的地址端口。利用施加到存储器地址端口的每个像素值,将显示该灰度级的当前计数在存储器的读取端口处出现。当前值增加一个,结果存储在16位寄存器中。 在下一个时钟周期中,寄存器的内容被施加到存储器的写入端口以更新输入像素值的当前计数。当处理所有像素时,存储器将包含不同像素值的总计数(直方图信息)。 为了实现公式8,我们需要计算灰度值在特定范围内的像素之和。将直方图存储器中存储的数据应用到一个累加器中,可以得到如图8所示的总和。 “地址生成计数器”使直方图(存储在“直方图内存”中)的连续bin值出现在“累加器”的输入处。将当前的仓位值与之前的仓位值之和相加,并将结果存储在“累计直方图内存”中。“累积直方图存储器”的地址也可以从“地址生成计数器”中获得。 如何将缩放因子\(\ frac {l-1} {n} \)应用于“累积直方图内存”的数据? 有几种不同的方法。本书第7.1.2节讨论了一种聪明的技术。FPGA上嵌入式图像处理的设计,修改了累加器的结构,以在单个块中执行累加和除法。另一种常用的技术是基于近似的比例因子(压裂{L-1}{N})。例如:L = 256, N = 256✕256 = 216., 我们有 \[\压裂{(l - 1)} {N} = \压裂{256 - 1}{256 \乘以256}\ simeq \压裂{1}{256}\] 除256 = 28.可以简单地通过将二进制数据转移到右侧8位来获得。因此,我们可以丢弃“累积直方图存储器”中数据的较低八位以获取均衡映射函数的输出值。 在本文中,我们更详细地研究了直方图均衡技术。我们试图开发直接进入该技术的映射功能如何平衡图像直方图。我们还简要讨论了直方图均衡方法的电路实现。方程5
方程6
图6.
方程7
离散情况
方程8
电路实现
图7.
图8.
总结
要查看我的文章的完整列表,请访问这个页面。