?? 第4章 圖象的半影調和抖動技術.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www-scf.usc.edu/~flv/ipbook/chap04.htm -->
<HTML><HEAD><TITLE>第4章 圖象的半影調和抖動技術</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312"><LINK
href="./chap04.files/editdata.mso" rel=Edit-Time-Data><LINK
href="./chap04.files/oledata.mso" rel=OLE-Object-Data>
<STYLE>.Normal {
TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 10.5pt; TEXT-INDENT: 0pt; LINE-HEIGHT: normal; FONT-FAMILY: "Times New Roman"; TEXT-ALIGN: justify
}
.a {
FONT-SIZE: 12pt; TEXT-INDENT: 0pt; LINE-HEIGHT: 20pt; FONT-FAMILY: "Times New Roman"; TEXT-ALIGN: center
}
</STYLE>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY class=Normal lang=ZH-CN vLink=purple link=blue bgColor=#ffffff>
<DIV style="LAYOUT-GRID: 15.6pt none">
<H1><A name=_Toc486331877></A><A name=_Toc486332877></A><A
name=_Toc486338986></A><A name=_Toc454810851></A><A
name=_Toc454856625><SPAN><SPAN>第<SPAN
lang=EN-US>4</SPAN></SPAN></SPAN></A><SPAN><SPAN><SPAN
style="FONT-FAMILY: 黑體">章</SPAN> </SPAN></SPAN><SPAN><SPAN><SPAN
style="FONT-FAMILY: 黑體">圖象的半影調和抖動技術</SPAN></SPAN></SPAN></H1>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">在介紹本章內容之前,先提出一個問題?普通的黑白針式打印機能打出灰度圖來嗎?如果說能,從針式打印機的打印原理來分析,似乎是不可能的。因為針打是靠撞針擊打色帶在紙上形成黑點的,不可能打出灰色的點來;如果說不能,可是我們的確見過用針式打印機打印出來的灰色圖象。到底是怎么回事呢?</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">你再仔細看看那些打印出來的所謂的灰色圖象,最好用放大鏡看。你會發現,原來這些灰色圖象都是由一些黑點組成的,黑點多一些,圖象就暗一些;黑點少一些,圖案就亮一些。下面這幾張圖就很能說明這一點。</SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><SPAN
lang=EN-US><IMG height=56 src="第4章 圖象的半影調和抖動技術.files/image001.gif" width=259
v:shapes="_x0000_i1025"> </SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN><SPAN lang=EN-US>4.1 </SPAN></B><B><SPAN
style="FONT-FAMILY: 宋體">用黑白兩種顏色打印出灰度效果</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">圖</SPAN><SPAN
lang=EN-US>4.1</SPAN><SPAN
style="FONT-FAMILY: 宋體">中最左邊的是原圖,是一幅真正的灰度圖,另外三張圖都是黑白二值圖。容易看出,最左的那幅和原圖最接近。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">由二值圖象顯示出灰度效果的方法,就是我們今天要講的半影調</SPAN><SPAN
lang=EN-US>(halftone)</SPAN><SPAN
style="FONT-FAMILY: 宋體">技術,它的一個主要用途就是在只有二值輸出的打印機上打印圖象。我們介紹兩種方法:圖案法和抖動法。</SPAN></P>
<H2><SPAN lang=EN-US>4.1</SPAN> <SPAN lang=EN-US></SPAN><A
name=_Toc486331878></A><A name=_Toc486332878></A><A name=_Toc486338987></A><A
name=_Toc454810852></A><A
name=_Toc454856626><SPAN><SPAN>圖案法</SPAN></SPAN></A></H2>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">圖案法</SPAN><SPAN
lang=EN-US>(patterning)</SPAN><SPAN
style="FONT-FAMILY: 宋體">是指灰度可以用一定比例的黑白點組成的區域表示,從而達到整體圖象的灰度感。黑白點的位置選擇稱為圖案化。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">在具體介紹圖案法之前,先介紹一下分辨率的概念。計算機顯示器,打印機,掃描儀等設備的一個重要指標就是分辨率,單位是</SPAN><SPAN
lang=EN-US>dpi(dot per inch)</SPAN><SPAN
style="FONT-FAMILY: 宋體">,即每英寸點數,點數越多,分辨率就越高,圖象就越清晰。讓我們來計算一下,計算機顯示器的分辨率有多高。設顯示器為</SPAN><SPAN
lang=EN-US>15</SPAN><SPAN style="FONT-FAMILY: 宋體">英寸</SPAN><SPAN
lang=EN-US>(</SPAN><SPAN style="FONT-FAMILY: 宋體">指對角線長度</SPAN><SPAN
lang=EN-US>)</SPAN><SPAN style="FONT-FAMILY: 宋體">,最多顯示</SPAN><SPAN
lang=EN-US>1280</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>1024</SPAN><SPAN style="FONT-FAMILY: 宋體">個點。因為寬高比為</SPAN><SPAN
lang=EN-US>4</SPAN><SPAN style="FONT-FAMILY: 宋體">:</SPAN><SPAN
lang=EN-US>3</SPAN><SPAN style="FONT-FAMILY: 宋體">,所以寬有</SPAN><SPAN
lang=EN-US>12</SPAN><SPAN style="FONT-FAMILY: 宋體">英寸,高有</SPAN><SPAN
lang=EN-US>9</SPAN><SPAN style="FONT-FAMILY: 宋體">英寸,則該顯示器的水平分辨率為</SPAN><SPAN
lang=EN-US>106dpi</SPAN><SPAN style="FONT-FAMILY: 宋體">,垂直分辨率為</SPAN><SPAN
lang=EN-US>113.8dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">。一般的激光打印機的分辨率有</SPAN><SPAN lang=EN-US>300dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>300dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">,</SPAN><SPAN lang=EN-US>600dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>600dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">,</SPAN><SPAN lang=EN-US>720dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>720dpi</SPAN><SPAN
style="FONT-FAMILY: 宋體">。所以打出來的圖象要比計算機顯示出來的清晰的多。掃描儀的分辨率要高一些,數碼相機的分辨率更高。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">言歸正傳,前面講了,圖案化使用圖案來表示象素的灰度,那么我們來做一道計算題。假設有一幅</SPAN><SPAN
lang=EN-US>240</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>180</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>8bit</SPAN><SPAN style="FONT-FAMILY: 宋體">的灰度圖,當用分辨率為</SPAN><SPAN
lang=EN-US>300dpi</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>300dpi</SPAN><SPAN style="FONT-FAMILY: 宋體">的激光打印機將其打印到</SPAN><SPAN
lang=EN-US>12.8</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>9.6</SPAN><SPAN style="FONT-FAMILY: 宋體">英寸的紙上時,每個象素的圖案有多大?</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">這道題很簡單,這張紙最多可以打</SPAN><SPAN lang=EN-US>(300</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>12.8) </SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>(300</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>9.6)=3840</SPAN><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>2880</SPAN><SPAN
style="FONT-FAMILY: 宋體">個點,所以每個象素可以用</SPAN><SPAN
lang=EN-US>(3840/240)</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>(2880/180)=16</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">個點大小的圖案來表示,即一個象素</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN style="FONT-FAMILY: 宋體">個點。如果這</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN
style="FONT-FAMILY: 宋體">的方塊中一個黑點也沒有,就可以表示灰度</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN style="FONT-FAMILY: 宋體">;有一個黑點,就表示灰度</SPAN><SPAN
lang=EN-US>255</SPAN><SPAN style="FONT-FAMILY: 宋體">;依次類推,當都是黑點時,表示灰度</SPAN><SPAN
lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋體">。這樣,</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">的方塊可以表示</SPAN><SPAN
lang=EN-US>257</SPAN><SPAN style="FONT-FAMILY: 宋體">級灰度,比要求的</SPAN><SPAN
lang=EN-US>8bit</SPAN><SPAN style="FONT-FAMILY: 宋體">共</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN
style="FONT-FAMILY: 宋體">級灰度還多了一個。所以上面的那幅圖的灰度級別完全能夠打印出來。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">這里有一個圖案構成的問題,即黑點打在哪里?比如說,只有一個黑點時,我們可以打在正中央,也可以打</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN
style="FONT-FAMILY: 宋體">的左上角。圖案可以是規則的,也可以是不規則的。一般情況下,有規則的圖案比隨即圖案能夠避免點的叢集,但有時會導致圖象中有明顯的線條。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">如圖</SPAN><SPAN
lang=EN-US>4.1</SPAN><SPAN style="FONT-FAMILY: 宋體">中,</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋體">的圖案可以表示</SPAN><SPAN
lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋體">級灰度,當圖象中有一片灰度為的</SPAN><SPAN
lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋體">的區域時,如圖</SPAN><SPAN
lang=EN-US>4.2</SPAN><SPAN style="FONT-FAMILY: 宋體">所示,有明顯的水平和垂直線條。</SPAN></P>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD class=Normal vAlign=bottom width=276>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
lang=EN-US><IMG height=89 src="第4章 圖象的半影調和抖動技術.files/image002.gif"
width=316 v:shapes="_x0000_i1027"> </SPAN></B></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>4.2 2</B><B><SPAN
style="FONT-FAMILY: 宋體">×</SPAN><SPAN lang=EN-US>2</SPAN></B><B><SPAN
style="FONT-FAMILY: 宋體">的圖案</SPAN><SPAN lang=EN-US></SPAN></B></P></TD>
<TD class=Normal vAlign=bottom width=276>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
lang=EN-US><IMG height=98 src="第4章 圖象的半影調和抖動技術.files/image003.gif"
width=162 v:shapes="_x0000_i1028"> </SPAN></B></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>4.3 </B><B><SPAN
style="FONT-FAMILY: 宋體">規則圖案導致線條</SPAN><SPAN
lang=EN-US></SPAN></B></P></TD></TR></TBODY></TABLE></DIV>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">如果想存儲</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN style="FONT-FAMILY: 宋體">級灰度的圖案,就需要</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>16</SPAN><SPAN
style="FONT-FAMILY: 宋體">的二值點陣,占用的空間還是相當可觀的。有一個更好的辦法是:只存儲一個整數矩陣,稱為標準圖案,其中的每個值從</SPAN><SPAN
lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋體">到</SPAN><SPAN
lang=EN-US>255</SPAN><SPAN
style="FONT-FAMILY: 宋體">。圖象的實際灰度和陣列中的每個值比較,當該值大于等于灰度時,對應點打一黑點。下面舉一個</SPAN><SPAN
lang=EN-US>25</SPAN><SPAN style="FONT-FAMILY: 宋體">級灰度的例子加以說明。</SPAN></P>
<P class=a style="LINE-HEIGHT: 18pt"><SPAN lang=EN-US><IMG height=124
src="第4章 圖象的半影調和抖動技術.files/image005.jpg" width=285 v:shapes="_x0000_i1029">
</SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>4.4 </B><B><SPAN
style="FONT-FAMILY: 宋體">標準圖案舉例</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">圖</SPAN><SPAN
lang=EN-US>4.4</SPAN><SPAN style="FONT-FAMILY: 宋體">中,左邊為標準圖案,右邊為灰度為</SPAN><SPAN
lang=EN-US>15</SPAN><SPAN style="FONT-FAMILY: 宋體">的圖案,共有</SPAN><SPAN
lang=EN-US>10</SPAN><SPAN style="FONT-FAMILY: 宋體">個黑點,</SPAN><SPAN
lang=EN-US>15</SPAN><SPAN style="FONT-FAMILY: 宋體">個白點。其實道理很簡單,灰度為</SPAN><SPAN
lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋體">時全是黑點,灰度每增加</SPAN><SPAN
lang=EN-US>1</SPAN><SPAN style="FONT-FAMILY: 宋體">,減少一個黑點。要注意的是,</SPAN><SPAN
lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋體">的圖案可以表示</SPAN><SPAN
lang=EN-US>26</SPAN><SPAN style="FONT-FAMILY: 宋體">種灰度,當灰度是</SPAN><SPAN
lang=EN-US>25</SPAN><SPAN style="FONT-FAMILY: 宋體">才是全白點,而不是灰度為</SPAN><SPAN
lang=EN-US>24</SPAN><SPAN style="FONT-FAMILY: 宋體">時。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">下面介紹一種設計標準圖案的算法,是由</SPAN><SPAN
lang=EN-US>Limb</SPAN><SPAN style="FONT-FAMILY: 宋體">在</SPAN><SPAN
lang=EN-US>1969</SPAN><SPAN style="FONT-FAMILY: 宋體">年提出的。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">先以一個</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋體">×</SPAN><SPAN
lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋體">的矩陣開始:設</SPAN><SPAN
lang=EN-US>M<SUB>1</SUB>=<SUB> <IMG height=48
src="第4章 圖象的半影調和抖動技術.files/image007.gif" width=49 v:shapes="_x0000_i1030">
</SUB></SPAN><SPAN style="FONT-FAMILY: 宋體">,通過遞歸關系有</SPAN><SPAN
lang=EN-US>M<SUB>n+1</SUB>=<SUB> <IMG height=51
src="第4章 圖象的半影調和抖動技術.files/image009.gif" width=181 v:shapes="_x0000_i1031">
</SUB></SPAN><SPAN style="FONT-FAMILY: 宋體">,其中</SPAN><SPAN
lang=EN-US>M<SUB>n</SUB></SPAN><SPAN style="FONT-FAMILY: 宋體">和</SPAN><SPAN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -