[OpenCV][Python]影像增強對比_自適應直方圖均衡化

閱讀時間約 1 分鐘

當影像中有雜訊時,使用直方圖均衡化來增強對比就會受雜訊的影響,從而影響到整體的結果。應對這個問題,可以考慮使用自適應直方圖均衡化來減少雜訊的影響,並增強對比度。

本文將比較直方圖均衡化自適應直方圖均衡化的差異性。

[OpenCV基礎][Python]影像增強_直方圖均衡處理


直方圖均衡化的結果

在原圖色彩較鮮艷的地方,灰階在增加後,明顯的對比就較強烈,這樣就會造成這些對比增強過多的輪廓外型的特徵就會相對的比較不清楚,例如下圖右上的位置,柱子一些特徵都消失了。

raw-image

自適應直方圖均衡化的結果

相對的,自適應直方圖就沒受到雜訊的影響,進而影響到對比的增強

raw-image

兩者放一起比較

是不是自適應直方圖均衡化表現較為出色呢。

raw-image

自適應直方圖均衡化 (CLAHE - Contrast Limited Adaptive Histogram Equalization)

自適應直方圖均衡化是一種改進的直方圖均衡化方法,它將影像分為小區域(稱為「塊」或「窗口」),對每個小區域分別進行直方圖均衡化。

為了避免雜訊放大,CLAHE 將對比度限制在一定範圍內。

這種方法有助於避免全局直方圖均衡化放大局部雜訊的問題,特別適合影像中亮度變化劇烈或含有雜訊的情況。

使用 CLAHE 的範例:

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 讀取影像,轉換為灰度圖
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 創建 CLAHE (限制對比度的門檻值設定為 2.0,塊大小為 8x8)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

# 應用 CLAHE 對影像進行自適應直方圖均衡化
clahe_image = clahe.apply(image)

# 畫出原始影像和自適應均衡化後的影像
plt.figure(figsize=(10, 6))

# 原始影像
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

# CLAHE 均衡化後的影像
plt.subplot(1, 2, 2)
plt.imshow(clahe_image, cmap='gray')
plt.title('CLAHE Image')
plt.axis('off')

plt.tight_layout()
plt.show()

CLAHE 主要優勢:

  1. 局部增強:它針對影像的局部區域進行處理,可以避免傳統直方圖均衡化對整體影像的過度影響。
  2. 限制對比度:可以設置 clipLimit 來限制對比度增強的程度,這樣可以避免雜訊被過度放大。


但還是要根據使用的情況跟需求,挑選適當的工具來做應用。

假設今天是要看圖片中狗或者是福興下龍的圖案,若是圖片是曝光的狀態下,直方圖均衡的結果就會比CLAHE來的好。

raw-image




    120會員
    203內容數
    本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
    留言0
    查看全部
    發表第一個留言支持創作者!
    螃蟹_crab的沙龍 的其他內容
    在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY ,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。 Gray=0.299×R+0.587×G+0.114×B 本文介紹了用其他方式來提取色彩通道
    cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
    局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
    在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
    常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
    上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
    在 OpenCV 中,將圖片從 BGR 色彩空間轉換為灰階圖像時常用cv2.COLOR_BGR2GRAY ,此函數使用了特定的權重來計算灰階值。這些權重是基於人眼對不同顏色的敏感度進行調整的。 Gray=0.299×R+0.587×G+0.114×B 本文介紹了用其他方式來提取色彩通道
    cv2.countNonZero 是 OpenCV 中的一個函數,用來計算二值圖像(或單通道圖像)中非零像素的數量。這個函數對於圖像處理中的許多操作非常有用,例如計算某個區域內的白色像素數量,從而幫助我們了解圖像的內容或進行進一步的分析。 使用範例 假設您有一個二值圖像,其中白色像素
    局部二值化(Local Thresholding)是一種影像處理技術,用來根據局部區域的像素值動態地將影像轉換為二值影像。這在處理光照不均勻的影像時特別有用。 與常見的兩種二值化(Otsu's與固定閥值)方法做比較。 實現局部二值化的範例: import cv2 import numpy
    在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
    常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
    上一篇提到利用cv2.inRangex,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。 [OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球 結果圖 將紅球改變顏色成藍球
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
    Thumbnail
    在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
    Thumbnail
    在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
    Thumbnail
    在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
    Thumbnail
    在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
    Thumbnail
    常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
    Thumbnail
    形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
    Thumbnail
    本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
    Thumbnail
    [影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    呈上篇文章,針對單排的圖像文字增加間隔,但如果文字是雙排呢 [OpenCV][Python]OCR分割及增加間隔[單排文字]
    Thumbnail
    在文字辨識中,適當的增加一文字彼此間的間隔是有幫助於辨識的,原因在大多數OCR引擎在處理字符時會依賴空白區域來區分不同的字符。如果字符之間的間隔過小,OCR引擎可能會將相鄰的字符誤認為一個單一的字符或難以正確切割字符。增加間隔可以幫助OCR引擎更準確地識別和切割每個字符。 本文說明如何增加OCR間
    Thumbnail
    在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
    Thumbnail
    在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
    Thumbnail
    在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
    Thumbnail
    常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
    Thumbnail
    形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
    Thumbnail
    本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
    Thumbnail
    [影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉