Python中的图像增强
讓我開始學習一些理論術語,以免妨礙您的學習。 當我們談論圖像增強時 ,這基本上意味著我們想要一個比原始圖像更合適的圖像新版本。
例如,當您掃描文檔時,輸出圖像的質量可能會比原始輸入圖像低。 因此,我們需要一種提高輸出圖像質量的方法,以使輸出圖像在視覺上對觀看者更具表現力,而這正是圖像增強發揮作用的地方。 增強圖像時,我們正在做的是銳化圖像特征,例如對比度和邊緣。
重要的是要注意,圖像增強功能不會增加圖像的信息內容,而是會增加所選功能的動態范圍,最終提高圖像的質量。 因此,在這里我們實際上不知道輸出圖像的外觀,但是我們應該能夠(主觀地)判斷是否有任何改進,例如觀察輸出圖像中的更多細節。
在數字圖像處理(即分割,表示)的基本步驟中,圖像增強通常用作預處理步驟。 有許多用于圖像增強的技術,但是在本教程中,我將介紹兩種技術: 圖像逆 變換和冪律變換 。 我們將看看如何在Python中實現它們。 所以,讓我們開始吧!
圖像反轉
您可能已經在本節的標題中猜到了(也可以稱為圖像求反 ),圖像反轉旨在將輸入圖像中的暗強度轉換為輸出圖像中的亮強度,并將輸入圖像中的亮強度轉換為到輸出圖像中的暗強度。 換句話說,暗區變亮,而亮區變暗。
假設I(i,j)是指位于(i,j)的像素的強度值。 為了在此處進行說明, 灰度圖像中的強度值落在[0,255]范圍內,并且(i,j)指行和列值。 當我們在灰度圖像上應用圖像逆算子時,輸出像素O(i,j)值為:
O(i,j) = 255 - I(i,j)如今,我們大多數圖像是彩色圖像。 這些圖像包含紅色 , 綠色和藍色三個通道,稱為RGB圖像。 在這種情況下,與上述公式相反,我們需要從255中減去每個通道的強度。因此,輸出圖像在像素(i,j)處將具有以下值:
O_R(i,j) = 255 - R(i,j) O_G(i,j) = 255 - G(i,j) O-B)i,j) = 255 - B(i,j)介紹完之后,讓我們看看如何在Python中實現圖像逆運算符。 我想提及一下,為簡單起見,我將在灰度圖像上運行該運算符。 但是,我會給您一些關于在彩色圖像上應用運算符的想法,并且我將把完整的程序留給您作為練習。
彩色圖像的第一件事是提取每個像素通道(即RGB)強度值。 為此,您可以使用Python Imaging Library(PIL) 。 繼續并從baboon.png下載示例狒狒圖像。 圖片大小為500x500 。 假設您要提取位于像素位置(325, 432)的紅色,綠色和藍色強度值。 可以按以下步驟完成:
from PIL import Imageim = Image.open('baboon.png') print im.getpixel((325,432))根據文檔, getpixel()方法的作用是:
返回給定位置的像素值。運行上面的腳本后,您會注意到僅得到以下結果: 138 ! 但是,三個通道的(RGB)強度值在哪里? 問題似乎與讀取圖像的mode有關。 通過運行以下語句檢查模式:
print im.mode您將獲得輸出P ,這意味著在調色板模式下讀取了圖像。 您可以做的一件事是在返回不同通道的強度值之前將圖像轉換為RGB模式。 為此,可以使用convert()方法,如下所示:
rgb_im = im.convert('RGB')在這種情況下,您將返回以下值: (180, 168, 178) 。 這意味著紅色,綠色和藍色通道的強度值分別為180、168和178。
為了匯總到目前為止我們已經描述的所有內容,將返回圖像的RGB值的Python腳本如下所示:
from PIL import Imageim = Image.open('baboon.png') rgb_im = im.convert('RGB') print rgb_im.getpixel((325,432))前進到圖像逆運算符之前,還剩一點。 上面的示例顯示了如何僅檢索一個像素的RGB值,但是執行逆運算符時,您需要對所有像素執行該操作。
要打印出每個像素不同通道的所有強度值,可以執行以下操作:
from PIL import Imageim = Image.open('baboon.png') rgb_im = im.convert('RGB') width, height = im.sizefor w in range(width):for h in range(height):print rgb_im.getpixel((w,h)) 在這一點上,我將作為練習,讓您了解如何在每個像素的所有彩色圖像通道(即RGB)上應用圖像反算子。
讓我們看一個將圖像逆運算符應用于灰度圖像的示例。 繼續并下載boat.tiff ,它將作為本節中的測試圖像。 看起來是這樣的:
我將使用scipy庫執行此任務。 在上述圖像上應用圖像逆運算符的Python腳本應如下所示:
import scipy.misc from scipy import misc from scipy.misc.pilutil import Imageim = Image.open('boat.tiff') im_array = scipy.misc.fromimage(im) im_inverse = 255 - im_array im_result = scipy.misc.toimage(im_inverse) misc.imsave('result.tiff',im_result)讀取圖像后,我們要做的第一件事是將其轉換為ndarray ,以便對其應用圖像逆運算符。 應用運算符后,我們只需將ndarray轉換回圖像并將該圖像另存為result.tiff 。 下圖顯示了將圖像反向應用到上方圖像的結果(原始圖像在左側,而應用圖像反向運算符的結果在右側):
請注意,在應用運算符后,圖像的某些功能變得更加清晰。 例如,看右圖中的云層和燈塔。
冪律變換
該運算符,也稱為伽瑪校正 ,是我們可以用來增強圖像的另一個運算符。 讓我們看一下運算符的方程式。 在像素(i,j) ,運算符如下所示:
p(i,j) = kI(i,j)^gammaI(i,j)是圖像位置(i,j)處的強度值; 和k和gamma是正常數。 我不會在這里詳細介紹數學細節,但是我相信您可以在圖像處理書籍中找到有關此主題的詳盡說明。 但是,重要的是要注意,在大多數情況下, k=1 ,因此我們將主要更改gamma的值。 因此,以上等式可以簡化為:
p(i,j) = I(i,j)^gamma我將在這里使用OpenCV和NumPy庫。 您可以查看我的教程NumPy簡介,以了解更多關于該庫的信息。 我們的測試圖像將再次是boat.tiff (繼續下載)。
執行冪律變換運算符的Python腳本如下所示:
import cv2 import numpy as npim = cv2.imread('boat.tiff') im = im/255.0 im_power_law_transformation = cv2.pow(im,0.6) cv2.imshow('Original Image',im) cv2.imshow('Power Law Transformation',im_power_law_transformation) cv2.waitKey(0)注意,我們選擇的gamma值為0.6 。 下圖顯示了原始圖像以及在該圖像上應用冪定律變換算符的結果(左圖顯示了原始圖像,右圖顯示了應用冪律變換算符后的結果)。
上面的結果是當gamma = 0.6 。 讓我們看看將gamma增加到1.5會發生什么,例如:
請注意,隨著我們增加gamma值,圖像會變暗,反之亦然。
有人可能會問,冪律變換的用途是什么。 實際上,用于圖像獲取,打印和顯示的不同設備根據冪定律變換運算符做出響應。 這是由于人腦使用伽瑪校正來處理圖像這一事實。 例如,當我們希望在計算機顯示器或電視屏幕上正確顯示圖像(所有圖像中顯示最佳圖像對比度)時,伽馬校正就很重要。
結論
在本教程中,您學習了如何使用Python增強圖像。 您已經了解了如何使用圖像逆運算符來突出顯示特征,以及如何將冪定律變換視為在計算機監視器和電視屏幕上正確顯示圖像的關鍵運算符。
此外,請不要猶豫,看看我們在Envato市場上可以出售和研究的東西 ,請提出任何問題,并使用下面的提要提供您的寶貴反饋。
翻譯自: https://code.tutsplus.com/articles/image-enhancement-in-python--cms-29289
總結
以上是生活随笔為你收集整理的Python中的图像增强的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 边缘增强算法MATLAB,基于MATLA
- 下一篇: python中的序列化与反序列化_Pyt