小白,感覺圖像處理很神奇!


像素有兩種理解。

1 已成像圖像的最小單元;

2 成像硬體的最小單元。

計算機圖形學原理與實踐,這本書裡面有介紹,對於單個像素,圖形學裡面有光線追蹤,通過單個像素的各個方向光線遍歷,來對該像素進行著色。

對於三角形單元來模擬物體表面,有光柵化方法。

光線追蹤和光柵化,區別是像素優先還是三角形優先。

你看,像素很複雜吧?

是不是有點怕?

我是有點。

再來看底層演算法。

圖形學裡面有關繪製演算法的介紹很底層。追溯到了幾百年前一個古老的繪製器。

繪製器大白話

夠底層吧?

還有隱藏層如下,

分身術

有意思吧?

想不想看這本書?

安排。

計算機圖形學原理及實踐(原書第3版)(基礎篇)京東¥ 87.90去購買?


像素是數字化圖像(digital image)最基礎的單元。也是數字圖像處理的常用或默認單元,但其實並非必需。

首先矢量化圖像(vector graphics)也可以進行圖像處理。通俗的講就是用極坐標系統對空間進行標記。

另外很多圖像處理使用的是信號處理(尤其是analog signal)的演算法,比如常用的傅里葉變換拉普拉斯變換等。所以也可以在頻域進行圖像處理,比如早期的電視和照片去噪之類。包括現在常用的卷積操作,實際上底層演算法優化都是把原圖和卷積核傅里葉變換後在頻域操作的。如果是按照定義的過程一個一個像素對應去實現,速度可以慢到懷疑人生(真的嘗試過這樣手寫卷積的同學,別怪Python,雖然Python確實垃圾,笑)。

現代的數字圖像處理,雖然基於像素,但通常應用實現於更高一級的單元。比如像素分類後的對象分類(pixel-classification --&> object classification)。或者像素聚類後形成的超像素(super-pixel, super-voxel),以此來擬合視覺信號的神經計算過程或提升演算法速度和質量。比如爛大街的神經網路中,卷積後下一層的每個像素可以近似看作上一層卷積核運算所包含像素集的超像素。(防杠:只是為了打個比方,實際上這樣形成的超像素沒什麼意義......)

圖像處理的底層選用什麼作為基本計算單元,由圖像處理的目的和與其對應的優化演算法決定。像素雖然是最普遍的基本單元,但不必拘泥,並且面嚮應用或硬體優化後,一般都會選用更合適的計算單元。


首先來說結論:是的,圖像處理的底層就是對圖像像素點進行處理。

來說說什麼是圖像。計算機上的圖像就是將數據進行可視化的呈現,下面以灰度圖像進行形象化的說明。我們將計算機能顯示最白的情況定義為255,將計算機能顯示最黑的情況定義為0,我任意給定一個數據,計算機負責將這個數據以特定的亮度進行顯示。

我現在讓計算機顯示四個方塊,最上角顯示255的亮度,右下角顯示0的亮度,其餘地方顯示128的亮度,就得到了上面這個圖片。

一共是256種亮度,我讓計算機逐一顯示,結果就得到了如下這麼一個圖,從亮到暗。

然後我給了計算機更複雜的指令,讓他在不同的位置顯示不同的亮度,就得到了如下這個灰度圖。

這個圖片的大小是772x488像素,我在共計376,736個小格子內告知計算機精確的亮度,計算機就給我呈現了這樣一條狗的形狀。

下面以二值化說說圖像處理。二值化是圖像處理領域最基礎的操作。前面講到圖像有256個亮度階,二值化呢,就是用兩個亮度階來進行表示,要麼最亮,要麼最暗。

所以咱先採用最簡單的策略,將亮度大於128的像素值調整為255,其餘調整為0,於是得到了如下圖片。

這樣的策略是不是太簡單了,咱來個稍微複雜點的吧,先看看這個圖像中各個亮度階的像素點都有多少個吧,來個統計,於是得到了下面這個圖。

看到中間紅點那裡好像有比較明顯的分界啊,要不咱試試用這個閾值代替之前的128?

兩張圖一對比,還是有區別的吧。

咱既然都統計了各個色階的數量了,這個圖像總共有376,736個像素,那就一半一半分,亮度較低一半像素點都設為0,其餘的設為255,於是有了下面的二值化結果。

事實證明,這是一次失敗的嘗試,但是既然嘗試了,結果肯定是要記錄下來的。

上面我們都是用真實圖像,效果不是特別理想,下面我們就用自定義的圖片來說說圖像處理。

這張圖以黑色為背景,上面又三個顏色接近,大小各異的圓,我們希望統計分析這三個圓的大小關係。所以我們先統計一下這張圖中每個亮度階的數量。

從統計結果可以看出,有四個比較明顯的峰,我們以這幾個峰所在的位置為閾值,得到四張圖。

在這裡將圖片加了紅色邊框方便區別。從這四張圖可知,通過四個不同的閾值,能夠將三個圓和背景進行很好的區分。

通過統計,獲知三個圓的面積比約為6.24:3.07:1。

以上就是關於計算機圖像處理的簡單舉例,當然事實上計算機圖像處理的演算法會非常複雜,但其最底層的原理基本上是相通的。


空間域和頻域


像素級系基礎——叫BitMap:基本上和圖像文件格式bmp相同語義但後者實際上系來源於前者。很多時候,像素集系CG(ComputerGraph,計算機圖形處理)之輸出;輸出的那個過程叫渲染。

在CG層反而不是以點陣圖為類型來進行處理——除非在一些廣義的CG領域如現在熱門尚未消之AI圖像分析、而是:這個這個,我枚舉地給你說吧:Window、Box·方盒、Rect·矩形,畫布·Canvas,形體·Shape,甚至直接與人們普通視覺中看得的幾何如骨骼、蒙皮,腦殼、毛髮、爆炸氣、顆粒、石頭、水面等等等等……在這些軟體域類型中作實一個對象、排列、控制、轉變等,叫做建模。

多嘴一句——你自稱小白可能不會太理解但你曉得這文字就可以了:現在還算熱門的圖像識別,就是倒渲染向地恢復出模型的類型。再多嘴一句,你應該懂得起動漫製作之類——建模到動漫鏡頭啊,至少還有三條街的距離。


推薦閱讀:
相关文章