?

基于Python的RGB圖像處理探究

2022-03-10 10:48
開封大學學報 2022年3期
關鍵詞:數字圖像數組手繪

李 響

(1.開封大學 信息工程學院,河南 開封 475004;2.開封市公共安全信息化工程技術研究中心,河南 開封 475004)

0 引言

隨著人工智能、機器學習的興起,Python這門誕生于20世紀90年代初的編程語言得到迅猛發展,市場占有率逐步攀升。2021年10月,Python超越Java語言、C語言等,榮登TIOBE榜首,成為最受歡迎的編程語言。Python不僅易學易用,更重要的是,它擁有功能強大、內容豐富的多種第三方擴展庫,能滿足常見的開發需求。

近年來,無論是科研領域還是日常生活領域,對圖像處理的要求都越來越高。圖像清晰度的提升,也使得需要處理的數字圖像的數據量大幅增加。這樣一來,選擇一種簡單、快捷、高效的圖像處理語言就成為關鍵。實踐證明,擁有PIL庫及NumPy庫的Python語言可以滿足編寫簡單、處理速度快的要求,適合于數字圖像處理的開發。

1 RGB圖像與Python

計算機中存儲和處理的圖像都是數字圖像,像素是數字圖像的最小組成單位。數字圖像被分成若干小方格,每個方格代表一個像素。像素有明確的位置和被分配的色彩數值,這樣才可以實現圖片數字化。在表示像素的色彩數值時,常常用到RGB。RGB是一種廣泛使用的色彩模式,RGB分別代表紅(Red)、綠(Green)、藍(Blue)三基色。在RGB色彩模式中,紅綠藍三基色分別被賦予0—255范圍內相應的強度等級。通過這三個顏色通道的變化和疊加,我們可以得到各種顏色。由此可知,在0—255范圍內取值的有序三元數(R,G,B)的集合,即為 RGB 色彩模式[1]。

RGB 模式={(R,G,B) |0≤R≤255,0≤G≤255,0≤B≤255}.

依據像素的位置及RGB值,在進行數字圖像處理時,可以將數字圖像轉換成一個M*N*3的三維數組。其中,M代表圖像每行的像素數,N代表圖像每列的像素數,3是指該像素點的RGB三元數值。這樣一來,在計算機中對RGB圖像的處理就轉變為對三維數組的操作。

Python語言中有兩個功能強大的第三方擴展庫——NumPy(Numeric Python)和PIL(Python Image Library)。通過使用這兩個庫,我們能完成常見的RGB圖像處理操作。NumPy庫提供了可以表示N維數組的ndarray對象,對數組數據,無須使用循環就可以進行快速運算,簡單、高效。PIL是一個具有強大圖像處理能力的第三方庫。Image類是 PIL中重要的類之一,通過它,可以實現簡單的圖像讀取、圖像旋轉、格式轉換、圖像調整等基本操作[2]。使用這兩個庫,我們可以實現RGB圖像的數字化,可以真切地感受到數字化的魅力。

例如,使用PhotoShop生成一個2*3的RGB圖像(見圖1)。

圖1 2*3的RGB圖像

可以看到,此RGB圖像即為一個2*3*3的三維數組,前兩個維度分別代表圖片的高度和寬度,第三個維度上的三個元素即為該位置上像素的RGB值。

2 RGB圖像的處理

2.1 基本步驟

RGB圖像轉換成數組后,我們就可以通過對數組的運算操作來處理圖像了。使用Python語言進行RGB圖像處理的一般步驟如下:

(1)讀入圖像;

(2)獲取圖像的RGB值,將其轉換為nadarry數組;

(3)按照圖像處理要求,運用數組運算操作,修改RGB圖像數組元素的值;

(4)將修改后的結果保存為新的圖像文件。

2.2 圖像的灰度變換

灰度變換是圖像處理軟件的基本功能需求,也是圖像增強技術的一種經典方法?;叶茸儞Q采用基本的數字圖像空間域處理方法來實現。它的原理是,將原圖像的每一個像素按照某一變換函數關系都對應到一個灰度值上?;叶茸儞Q的主要目的是改善圖像顯示效果或突出圖像中令人感興趣的部分。它在生物醫學、公共安全等領域有著廣泛用途?;叶茸儞Q也被稱為圖像的對比度拉伸或對比度增強[3]。例如,為了突出顯示圖像的某一細節,可將該圖像的灰度級擴展或壓縮,這是圖像增強技術的具體應用。

在Python語言條件下,我們通常使用PIL庫中的Image類讀入圖片,將轉換后的圖片存入NumPy庫的ndarray數組中,然后按需求執行相應的數學運算,從而達到圖像灰度變換的目的。

例如,采用下面的代碼來實現:將圖2(原始圖像)通過反相處理,變換為圖3(反向圖像);使用NumPy庫中的dot()點乘函數,將RGB彩色圖片變換為黑白圖片(見圖4);對原圖像的灰度值做區間壓縮及擴展,得到圖5。

圖2 原始圖像kfdx.jpg

圖3 反向圖像three.jpg

圖4 黑白圖像 four.jpg

圖5 灰度值區間變換圖像five.jpg

3 RGB圖像手繪效果的實現

在圖像處理軟件中,實現圖像的手繪效果是一個常見功能。圖像的手繪效果是在圖像灰度化處理的基礎上,由立體效果和明暗效果疊加而成的?;叶缺硎緢D像的明暗變化情況,梯度值是指明暗的變化率??梢?,通過調整像素的梯度值,可以間接改變圖片的明暗程度。立體效果可以通過添加虛擬深度值來實現。

在Python語言條件下,通過編程實現圖像手繪效果的核心和關鍵是:利用梯度函數找到物體邊緣,建立圖像的像素值與梯度值的反比關系,以達到用黑色線表示物體邊緣的目的。為此,須設計一個位于圖像斜上方的虛擬光源,光源相對于圖像的俯視角為Elevation,方位角是Azimuth,如圖6所示。建立光源對各像素點梯度值的影響函數,計算出新的像素值。在利用梯度重構圖像時,用每個像素的梯度值和各方向的影響因子合成灰度值,并歸一化到0—255區間,舍棄掉少許溢出的灰度值,以避免錯誤的產生。最后,將數組重構為圖像。

圖6 虛擬光源效果模型

例如,采用下面的代碼來實現:將原始圖像(見圖2)轉換為手繪效果圖像(見圖7)。

圖7 手繪效果圖像kfdx_demo.jpg

4 總結

數字圖像的處理主要包括提高圖像的視感質量、提取圖像中所包含的某些特征、圖像數據的變換、編碼和壓縮等內容[4]。使用Python的NumPy和PIL擴展庫,可以使數字圖像處理程序代碼變得簡單、高效。這一方法值得應用和推廣。

猜你喜歡
數字圖像數組手繪
手繪風景照
JAVA稀疏矩陣算法
數字圖像水印技術綜述
齊心手繪《清明上河圖》
JAVA玩轉數學之二維數組排序
ARGUS-100 藝術品鑒證數字圖像比對系統
Excel數組公式在林業多條件求和中的應用
手繪
手繪二十四節氣
基于塊效應測度的JPEG數字圖像盲取證
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合