李 響
(1.開封大學 信息工程學院,河南 開封 475004;
2.開封市公共安全信息化工程技術(shù)研究中心,河南 開封 475004)
隨著人工智能、機器學習的興起,Python這門誕生于20世紀90年代初的編程語言得到迅猛發(fā)展,市場占有率逐步攀升。2021年10月,Python超越Java語言、C語言等,榮登TIOBE榜首,成為最受歡迎的編程語言。Python不僅易學易用,更重要的是,它擁有功能強大、內(nèi)容豐富的多種第三方擴展庫,能滿足常見的開發(fā)需求。
近年來,無論是科研領(lǐng)域還是日常生活領(lǐng)域,對圖像處理的要求都越來越高。圖像清晰度的提升,也使得需要處理的數(shù)字圖像的數(shù)據(jù)量大幅增加。這樣一來,選擇一種簡單、快捷、高效的圖像處理語言就成為關(guān)鍵。實踐證明,擁有PIL庫及NumPy庫的Python語言可以滿足編寫簡單、處理速度快的要求,適合于數(shù)字圖像處理的開發(fā)。
計算機中存儲和處理的圖像都是數(shù)字圖像,像素是數(shù)字圖像的最小組成單位。數(shù)字圖像被分成若干小方格,每個方格代表一個像素。像素有明確的位置和被分配的色彩數(shù)值,這樣才可以實現(xiàn)圖片數(shù)字化。在表示像素的色彩數(shù)值時,常常用到RGB。RGB是一種廣泛使用的色彩模式,RGB分別代表紅(Red)、綠(Green)、藍(Blue)三基色。在RGB色彩模式中,紅綠藍三基色分別被賦予0—255范圍內(nèi)相應(yīng)的強度等級。通過這三個顏色通道的變化和疊加,我們可以得到各種顏色。由此可知,在0—255范圍內(nèi)取值的有序三元數(shù)(R,G,B)的集合,即為 RGB 色彩模式[1]。
RGB 模式={(R,G,B) |0≤R≤255,0≤G≤255,0≤B≤255}.
依據(jù)像素的位置及RGB值,在進行數(shù)字圖像處理時,可以將數(shù)字圖像轉(zhuǎn)換成一個M*N*3的三維數(shù)組。其中,M代表圖像每行的像素數(shù),N代表圖像每列的像素數(shù),3是指該像素點的RGB三元數(shù)值。這樣一來,在計算機中對RGB圖像的處理就轉(zhuǎn)變?yōu)閷θS數(shù)組的操作。
Python語言中有兩個功能強大的第三方擴展庫——NumPy(Numeric Python)和PIL(Python Image Library)。通過使用這兩個庫,我們能完成常見的RGB圖像處理操作。NumPy庫提供了可以表示N維數(shù)組的ndarray對象,對數(shù)組數(shù)據(jù),無須使用循環(huán)就可以進行快速運算,簡單、高效。PIL是一個具有強大圖像處理能力的第三方庫。Image類是 PIL中重要的類之一,通過它,可以實現(xiàn)簡單的圖像讀取、圖像旋轉(zhuǎn)、格式轉(zhuǎn)換、圖像調(diào)整等基本操作[2]。使用這兩個庫,我們可以實現(xiàn)RGB圖像的數(shù)字化,可以真切地感受到數(shù)字化的魅力。
例如,使用PhotoShop生成一個2*3的RGB圖像(見圖1)。
圖1 2*3的RGB圖像
可以看到,此RGB圖像即為一個2*3*3的三維數(shù)組,前兩個維度分別代表圖片的高度和寬度,第三個維度上的三個元素即為該位置上像素的RGB值。
2.1 基本步驟
RGB圖像轉(zhuǎn)換成數(shù)組后,我們就可以通過對數(shù)組的運算操作來處理圖像了。使用Python語言進行RGB圖像處理的一般步驟如下:
(1)讀入圖像;
(2)獲取圖像的RGB值,將其轉(zhuǎn)換為nadarry數(shù)組;
(3)按照圖像處理要求,運用數(shù)組運算操作,修改RGB圖像數(shù)組元素的值;
(4)將修改后的結(jié)果保存為新的圖像文件。
2.2 圖像的灰度變換
灰度變換是圖像處理軟件的基本功能需求,也是圖像增強技術(shù)的一種經(jīng)典方法。灰度變換采用基本的數(shù)字圖像空間域處理方法來實現(xiàn)。它的原理是,將原圖像的每一個像素按照某一變換函數(shù)關(guān)系都對應(yīng)到一個灰度值上。灰度變換的主要目的是改善圖像顯示效果或突出圖像中令人感興趣的部分。它在生物醫(yī)學、公共安全等領(lǐng)域有著廣泛用途。灰度變換也被稱為圖像的對比度拉伸或?qū)Ρ榷仍鰪姡?]。例如,為了突出顯示圖像的某一細節(jié),可將該圖像的灰度級擴展或壓縮,這是圖像增強技術(shù)的具體應(yīng)用。
在Python語言條件下,我們通常使用PIL庫中的Image類讀入圖片,將轉(zhuǎn)換后的圖片存入NumPy庫的ndarray數(shù)組中,然后按需求執(zhí)行相應(yīng)的數(shù)學運算,從而達到圖像灰度變換的目的。
例如,采用下面的代碼來實現(xiàn):將圖2(原始圖像)通過反相處理,變換為圖3(反向圖像);
使用NumPy庫中的dot()點乘函數(shù),將RGB彩色圖片變換為黑白圖片(見圖4);
對原圖像的灰度值做區(qū)間壓縮及擴展,得到圖5。
圖2 原始圖像kfdx.jpg
圖3 反向圖像three.jpg
圖4 黑白圖像 four.jpg
圖5 灰度值區(qū)間變換圖像five.jpg
在圖像處理軟件中,實現(xiàn)圖像的手繪效果是一個常見功能。圖像的手繪效果是在圖像灰度化處理的基礎(chǔ)上,由立體效果和明暗效果疊加而成的。灰度表示圖像的明暗變化情況,梯度值是指明暗的變化率。可見,通過調(diào)整像素的梯度值,可以間接改變圖片的明暗程度。立體效果可以通過添加虛擬深度值來實現(xiàn)。
在Python語言條件下,通過編程實現(xiàn)圖像手繪效果的核心和關(guān)鍵是:利用梯度函數(shù)找到物體邊緣,建立圖像的像素值與梯度值的反比關(guān)系,以達到用黑色線表示物體邊緣的目的。為此,須設(shè)計一個位于圖像斜上方的虛擬光源,光源相對于圖像的俯視角為Elevation,方位角是Azimuth,如圖6所示。建立光源對各像素點梯度值的影響函數(shù),計算出新的像素值。在利用梯度重構(gòu)圖像時,用每個像素的梯度值和各方向的影響因子合成灰度值,并歸一化到0—255區(qū)間,舍棄掉少許溢出的灰度值,以避免錯誤的產(chǎn)生。最后,將數(shù)組重構(gòu)為圖像。
圖6 虛擬光源效果模型
例如,采用下面的代碼來實現(xiàn):將原始圖像(見圖2)轉(zhuǎn)換為手繪效果圖像(見圖7)。
圖7 手繪效果圖像kfdx_demo.jpg
數(shù)字圖像的處理主要包括提高圖像的視感質(zhì)量、提取圖像中所包含的某些特征、圖像數(shù)據(jù)的變換、編碼和壓縮等內(nèi)容[4]。使用Python的NumPy和PIL擴展庫,可以使數(shù)字圖像處理程序代碼變得簡單、高效。這一方法值得應(yīng)用和推廣。
猜你喜歡數(shù)字圖像數(shù)組手繪手繪風景照閱讀(高年級)(2022年9期)2022-10-08JAVA稀疏矩陣算法電腦報(2022年13期)2022-04-12數(shù)字圖像水印技術(shù)綜述湖南理工學院學報(自然科學版)(2022年1期)2022-03-16齊心手繪《清明上河圖》瘋狂英語·初中天地(2021年5期)2021-07-21JAVA玩轉(zhuǎn)數(shù)學之二維數(shù)組排序電腦報(2020年24期)2020-07-15ARGUS-100 藝術(shù)品鑒證數(shù)字圖像比對系統(tǒng)藝術(shù)品鑒證.中國藝術(shù)金融(2018年12期)2018-08-26Excel數(shù)組公式在林業(yè)多條件求和中的應(yīng)用林業(yè)調(diào)查規(guī)劃(2017年6期)2017-03-27手繪神州學人(2016年9期)2016-10-20手繪二十四節(jié)氣學苑創(chuàng)造·A版(2016年4期)2016-04-16基于塊效應(yīng)測度的JPEG數(shù)字圖像盲取證池州學院學報(2015年3期)2016-01-05