【OpenCV 例程200篇】208. Photoshop 对比度自动调整算法
OpenCV 例程200篇 總目錄
【youcans 的 OpenCV 例程200篇】208. Photoshop 對比度自動調整算法
對比度是指圖像中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量,差異范圍越大代表對比越大。 當對比率達到 120:1 就可以容易地顯示生動、豐富的色彩,對比率高達 300:1 時就可支持各階的顏色。
對比度對視覺效果的影響非常關鍵。高對比度對于圖像的清晰度、細節表現、灰度層次表現都有很大幫助。
對比度調整的目的通常是增強對比度,形成清晰的圖像效果和醒目的視覺沖擊力。
Photoshop 提供了自動對比度調整功能(AutoContrast),通過自動將圖像最深的顏色加強為黑色,最亮的部分加強為白色,以增強圖像的亮度和暗度的對比度。
Photoshop 中的自動對比度調整算法,與自動色階調整算法基本相同,區別在于對比度自動調整不是對三個通道分別調整,而是對各通道按統一的比例進行調整。首先獲取圖像的亮度信息,然后根據修剪比例對亮度進行動態范圍的拉伸,同比例調整 R,G,B 三個通道,因此不會出現色偏問題。
Enhance Monochromatic Contrast
Clips all channels identically. This preserves the overall color relationship while making highlights appear lighter and shadows appear darker. The Auto Contrast command uses this algorithm.
參考文獻: Set Auto adjustment options (adobe.com)
輸入色階調整,先根據黑場閾值和白場閾值對圖像的動態范圍進行線性拉伸,再根據灰場調節值進行伽馬變換,對發白(曝光過度)或過暗(曝光不足)進行矯正。
V1={0,Vin<Sin255,Vin>Hin255?(Vin?Sin)/(Hin?Sin),elseV2=255?(V1/255)1/M\begin{aligned} & V_1 = \begin{cases} 0 &, V_{in}<S_{in} \\ 255 &, V_{in}>H_{in} \\ 255 * {(V_{in}-S_{in})}/{(H_{in}-S_{in})} &, else \end{cases} \\ \\ & V_2 = 255 * (V_1 / 255)^{1/M} \end{aligned} ?V1?=??????0255255?(Vin??Sin?)/(Hin??Sin?)?,Vin?<Sin?,Vin?>Hin?,else?V2?=255?(V1?/255)1/M?
輸出色階調整是基于動態范圍進行線性拉伸:
Vout={0,V2<0255,V2>255Sout+(Hout?Sout)?V2?/255,elseV_{out} = \begin{cases} 0 &, V_{2}<0 \\ 255 &, V_{2}>255 \\ S_{out} + {(H_{out}-S_{out})} * V_2 */255 &, else \end{cases} Vout?=??????0255Sout?+(Hout??Sout?)?V2??/255?,V2?<0,V2?>255,else?
例程 14.15:Photoshop 對比度自動調整算法
本例程實現 Photoshop 的對比度自動調整算法,對三個通道同時調整。
# 14.15 Photoshop 對比度自動調整算法def autoLevels(img, cutoff=0.1): # 自動色階調整channels = img.shape[2] # h,w,chtable = np.zeros((1,256,3), np.uint8)for ch in range(channels):# cutoff=0.1, 計算 0.1%, 99.9% 分位的灰度值low = np.percentile(img[:,:,ch], q=cutoff) # ch 通道, cutoff=0.1, 0.1 分位的灰度值high = np.percentile(img[:,:,ch], q=100 - cutoff) # 99.9 分位的灰度值, [0, high] 占比99.9%# 輸入動態線性拉伸Sin = min(max(low, 0), high - 2) # Sin, 黑場閾值, 0<=Sin<HinHin = min(high, 255) # Hin, 白場閾值, Sin<Hin<=255difIn = Hin - SinV1 = np.array([(min(max(255*(i-Sin)/difIn, 0), 255)) for i in range(256)])# 灰場伽馬調節gradMed = np.median(img[:,:,ch]) # 拉伸前的中值Mt = V1[int(gradMed)] / 128. # 拉伸后的映射值V2 = 255 * np.power(V1/255, 1/Mt) # 伽馬調節# 輸出線性拉伸Sout, Hout = 5, 250 # Sout 輸出黑場閾值, Hout 輸出白場閾值difOut = Hout - Souttable[0, :, ch] = np.array([(min(max(Sout + difOut*V2[i]/255, 0), 255)) for i in range(256)])return cv.LUT(img, table)def autoContrast(img, cutoff): # 自動對比度調整gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 轉換為灰度圖像# 計算 0.1%, 99.9% 分位的灰度值Sin = np.percentile(gray, q=cutoff) # cutoff=0.1, 0.1 分位的灰度值Hin = np.percentile(gray, q=100 - cutoff) # 99.9 分位的灰度值, [0, per999] 占比99.9%# 輸入動態線性拉伸difIn = Hin - SinV1 = np.array([(min(max(255 * (i-Sin)/difIn,0), 255)) for i in range(256)])# 灰場伽馬調節, Mt: 0.01~9.99gradMed = np.median(gray) # 拉伸前的中值Mt = V1[int(gradMed)] / 160. # 拉伸后的映射值V2 = 255 * np.power(V1/255, 1/Mt) # 伽馬調節# 輸出線性拉伸Sout, Hout = 5, 250 # Sout 輸出黑場閾值, Hout 輸出白場閾值difOut = Hout - Souttable = np.array([(min(max(Sout + difOut*V2[i]/255, 0), 255)) for i in range(256)]).astype("uint8")imgTone = cv.LUT(img, table)return imgTone# Photoshop 自動對比度調整算法img = cv.imread("../images/Fig0310b.tif", flags=1) # 讀取彩色圖像# img = cv.imread("../images/demist02.png", flags=1) # 讀取彩色圖像# 色階自動調整cutoff = 0.1 # 截斷比例, 建議范圍 [0.0,1.0]levelsAuto = autoLevels(img, cutoff)# 對比度自動調整cutoff = 0.1 # 截斷比例, 建議范圍 [0.0,1.0]contrastAuto = autoContrast(img, cutoff)plt.figure(figsize=(9, 6))plt.subplot(131), plt.title("Origin"), plt.axis('off')plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))plt.subplot(132), plt.title("AutoLevels"), plt.axis('off')plt.imshow(cv.cvtColor(levelsAuto, cv.COLOR_BGR2RGB))plt.subplot(133), plt.title("AutoContrast"), plt.axis('off')plt.imshow(cv.cvtColor(contrastAuto, cv.COLOR_BGR2RGB))plt.tight_layout()plt.show()例程運行結果的上圖接近灰度圖像,色階自動調整與對比度自動調整的效果類似,沒有明顯的區別。而在下圖中出,色階自動調整由于對 R/G/B 三個通道單獨進行調整,出現了明顯的色偏問題;而對比度自動調整則不會發生色偏。
【本節完】
版權聲明:
參考文獻: Use the Photoshop Levels adjustment (adobe.com)
youcans@xupt 原創作品,轉載必須標注原文鏈接:(https://blog.csdn.net/youcans/article/details/125389684)
Copyright 2022 youcans, XUPT
Crated:2022-6-20
歡迎關注 『youcans 的 OpenCV 例程 200 篇』 系列,持續更新中
歡迎關注 『youcans 的 OpenCV學習課』 系列,持續更新中
201. 圖像的顏色空間轉換
202. 查表快速替換(cv.LUT)
203. 偽彩色圖像處理
204. 圖像的色彩風格濾鏡
205. 調節色彩平衡/飽和度/明度
206. Photoshop 色階調整算法
207. Photoshop 色階自動調整算法
208. Photoshop 對比度自動調整算法
總結
以上是生活随笔為你收集整理的【OpenCV 例程200篇】208. Photoshop 对比度自动调整算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用Photoshop生成Sprite
- 下一篇: 高中数学必考公式全总结