图像增强之对比度拉伸
生活随笔
收集整理的這篇文章主要介紹了
图像增强之对比度拉伸
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們前面提到過圖像二值化,圖像反轉,本質上是對圖像的所有像素點的灰度進行操作,屬于灰度變換的內容。灰度變換的主要目的是用于圖像增強。
而對比度拉伸是圖像增強的一種方法,也屬于灰度變換操作。我們看如下圖像:
可以看到,這張圖片非?;野?。我們查看下其直方圖。
可以看到所有像素的灰度值大部分集中在20-50之間,這使得整個圖像很暗淡。也就是說對比度不高。如果我們通過灰度變換,將灰度值拉伸到整個0-255的區間,那么其對比度顯然是大幅增強的??梢杂萌缦碌墓絹韺⒛硞€像素的灰度值映射到更大的灰度空間:
I(x,y)=I(x,y)?IminImax?Imin(MAX?MIN)+MINI(x,y)=I(x,y)?IminImax?Imin(MAX?MIN)+MIN
其中Imin,Imax是原始圖像的最小灰度值和最大灰度值,MIN和MAX是要拉伸到的灰度空間的灰度最小值和最大值。
Imax = np.max(farina) Imin = np.min(farina) MAX = 255 MIN = 0 farina_cs = (farina - Imin) / (Imax - Imin) * (MAX - MIN) + MIN cv2.imshow("farina_cs", farina_cs.astype("uint8")) cv2.waitKey()可以看出,對比度提升了很多。我們再看看其直方圖,可以看到已經充滿了整個灰度空間。
除了上述方法,對比度拉伸還有其它方法嗎?當然是有的。例如直方圖位移法(Histogram shifting)。公式如下:,
在每個像素位置的灰度值增加一個偏移量offset。注意,這個offset可以是正數,也可以是負數。正的話,整體亮度變亮,負的話,整體亮度變暗。需要注意的是控制offset的值大小,不要越界。 farina_cs = farina + 100 cv2.imshow("farina_offset", farina_cs.astype("uint8")) cv2.waitKey() hist_full = cv2.calcHist([farina_cs.astype("uint8")], [0], None, [256], [0, 256]) plt.plot(hist_full) plt.show()
下面分別是使用直方圖位移方法后的圖像和其直方圖。
可以看出直方圖與原始直方圖形狀一模一樣,只是在橫軸上有所偏移。這種方法的圖像增強效果并沒有上一種方法好。
總結
以上是生活随笔為你收集整理的图像增强之对比度拉伸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微分算子为什么也是空间滤波器
- 下一篇: 图像旋转变换的推导