直方图匹配这个东西看了好几天,终于搞明白了。
首先说直方图均衡化:如果一个图像的灰度级别比较集中,均衡化实际会让集中的灰度级别分散,这样是图像的对比度加大也就是增强了,图像看起来更清晰。
再说直方图匹配:直方图均衡化是自动的,如果想让图像的灰度级分布按照某种特定的直方图进行分布,就进行直方图匹配操作。
原始图像的灰度分布 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
790 | 1023 | 850 | 656 | 329 | 245 | 122 | 81 |
0.192871 | 0.249756 | 0.20752 | 0.160156 | 0.080322 | 0.059814 | 0.029785 | 0.019775 |
原始图像灰度的累积分布 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
790 | 1023 | 850 | 656 | 329 | 245 | 122 | 81 |
0.192871 | 0.249756 | 0.20752 | 0.160156 | 0.080322 | 0.059814 | 0.029785 | 0.019775 |
0.192871 | 0.442627 | 0.650146 | 0.810303 | 0.890625 | 0.950439 | 0.980225 | 1 |
1 | 3 | 5 | 6 | 6 | 7 | 7 | 7 |
均衡化后的结果 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 790 | 0 | 1023 | 0 | 850 | 985 | 448 |
上面是一个例子,是进行直方图均衡化之后的例子。直方图均衡化和直方图匹配,实际都不会使每个灰度级上的像素点的总量发生变化(也有特例,比如上面这个例子中均衡化之后原来的灰度级为3,4的像素都变成了6级,5,6,7都变成了7级,这是因为例子中灰度级很少只有8钟,在转换后取整的结果,如果灰度级很大的时候这种几率应该比较小)。直方图均衡化之后会增强图像的对比度。
直方图匹配,是计算原始图像上的灰度级的累积分布和目标直方图上灰度级的累积分布,在目标直方图上找原始图像灰度级的累积分布与目标直方图上的累积分布差最小的那个灰度级,用这个灰度级替代原始图像的灰度级。比如:原始图像上1级的累积分布是0.2,目标直方图上的2级累积分布也是0.2,目标直方图上的2级与原始图像1级累积分布的差最小,所以就用2级替代原始图像的1级,对原始图像所有的灰度级都做同样的操作后,就得到了直方图匹配的结果。
代码已经基本写完,有点小问题,在改进一下。