數字圖像處理編成入門筆記——第四章圖象的半影調和抖動技術

1.     黑白二值圖:只由黑點和白點組成,表現出灰色圖象的效果。黑點越多,圖像就暗點,反之,圖像就亮點。

2.     半影調技術:由二值圖象顯示出灰度效果的方法。它的一個主要用途就是在只有二值輸出的打印機上打印圖象。主要的兩種方法:圖案法和抖動法

 

4.1 圖案法

1. 圖案法是指灰度可以用一定比例的黑白點組成的區域表示,從而達到整體圖象的灰度感。黑白點的位置選擇稱爲圖案化

2. 分辨率,單位是dpi(dot per inch),即每英寸點數,點數越多,分辨率就越高,圖象就越清晰。顯示器的尺寸(英寸)是指對角線。

3. 像素點灰度的表示方法(圖案):如果這16×16的方塊中一個黑點也沒有,就可以表示灰度256;有一個黑點,就表示灰度255;依次類推,當都是黑點時,表示灰度0。這樣,16×16的方塊可以表示257級灰度。

4. 圖案的構成:有規則的圖案和隨機的圖案。一般情況下,有規則的圖案比隨即圖案能夠避免點的叢集,但有時會導致圖象中有明顯的線條。

5. 標準圖案一個整數矩陣。例如要表示256級灰度,則其中的每個值從0255。圖象的實際灰度和陣列中的每個值比較,當該值大於等於灰度時,對應點打一黑點。

6. 設計標準圖案的算法:(由Limb1969年提出的)

先以一個2×2的矩陣開始:設M1= ,通過遞歸關係有Mn+1= ,其中MnUn均爲2n×2n的方陣,Un的所有元素都是1。根據這個算法,可以得到M2= ,爲16級灰度的標準圖案。

M3(8×8)比較特殊,稱爲Bayer抖動表M4是一個16×16的矩陣。

 

7. 不改變原圖的大小下,使用利用圖案化技術:設原圖是256級灰度,利用Bayer抖動表,做如下處理:

if (g[y][x]>>2) > bayer[y&7][x&7] then 打一白點 else 打一黑點

其中,x,y代表原圖的象素座標,g[y][x]代表該點灰度。首先將灰度右移兩位,變成64級,然後將xy做模8運算,找到Bayer表中的對應點,兩者做比較,根據上面給出的判據做處理。模8運算使得原圖分成了一個個8×8的小塊,每個小塊和8×8Bayer表相對應。

 

4.2 抖動法

1. 規則抖動:如上面提到Bayer表算法。優點是算法簡單;缺點是圖案化有時很明顯,這是因爲取模運算雖然引入了隨機成分,但還是有規律的。

 

2. Floyd-Steinberg算法:

假設灰度級別的範圍從b(black)w(white),中間值t(b+w)/2,對應256級灰度,b=0,w=255,t=127.5。設原圖中象素的灰度爲g,誤差值爲e,則新圖中對應象素的值用如下的方法得到:

if g > t then

打白點

e=g-w

else

打黑點

e=g-b

3/8 × e 加到右邊的象素

3/8 × e 加到下邊的象素

1/4 × e 加到右下方的象素

  但在這個算法中,因爲e有可能是負數,爲了防止得到的值超出char能表示的範圍,我們使用了一個int類型的緩衝區存儲新值。

  要注意的是,誤差傳播有時會引起流水效應,即誤差不斷向下,向右累加傳播。解決的辦法是:奇數行從左到右傳播,偶數行從右到左傳播。

 

4.3 bmp文件轉換爲txt文件

1. 原理:首先將位圖分成同樣大小的小塊,求出每一塊灰度的平均值,然後和每個字符的灰度做比較,找出最接近的那個字符,來代表這一小塊圖象。

2. 字符灰度的確定方法:打開記事本(notepad),輸入字符“1”,選定該字符,使其反色。按Alt+PrintScreen鍵拷貝窗口屏幕。打開畫筆(paintbrush),粘貼;然後把圖放到最大(×8),打開“查看”→“縮放” →“顯示網格”菜單。每個字符的面積是8×16(寬×高),所以一個字符的灰度值可以用如下的公式計算(1-所佔的黑點數/(8×16))×255

   在努力,就是向成功一點點邁進!加油~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章