?? 第2章 圖象的幾何變換.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www-scf.usc.edu/~flv/ipbook/chap02.htm -->
<HTML><HEAD><TITLE>第2章 圖象的幾何變換</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312"><LINK
href="./chap02.files/editdata.mso" rel=Edit-Time-Data><LINK
href="./chap02.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=_Toc486331867></A><A name=_Toc486332867></A><A
name=_Toc486338976></A><A name=_Toc454810841></A><A
name=_Toc454856615><SPAN><SPAN>第<SPAN
lang=EN-US>2</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>
<H2><SPAN lang=EN-US>2.1</SPAN> <SPAN lang=EN-US></SPAN><A
name=_Toc486331868></A><A name=_Toc486332868></A><A name=_Toc486338977></A><A
name=_Toc454810842></A><A
name=_Toc454856616><SPAN><SPAN>平移</SPAN></SPAN></A></H2>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">平移</SPAN><SPAN
lang=EN-US>(translation)</SPAN><SPAN
style="FONT-FAMILY: 宋體">變換大概是幾何變換中最簡單的一種了。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">如圖</SPAN><SPAN
lang=EN-US>2.1</SPAN><SPAN style="FONT-FAMILY: 宋體">所示,初始坐標為</SPAN><SPAN
lang=EN-US>(x<SUB>0</SUB>,y<SUB>0</SUB>)</SPAN><SPAN
style="FONT-FAMILY: 宋體">的點經過平移</SPAN><SPAN
lang=EN-US>(t<SUB>x</SUB>,t<SUB>y</SUB>)(</SPAN><SPAN
style="FONT-FAMILY: 宋體">以向右,向下為正方向</SPAN><SPAN lang=EN-US>)</SPAN><SPAN
style="FONT-FAMILY: 宋體">后,坐標變為</SPAN><SPAN
lang=EN-US>(x<SUB>1</SUB>,y<SUB>1</SUB>)</SPAN><SPAN
style="FONT-FAMILY: 宋體">。這兩點之間的關系是</SPAN><SPAN
lang=EN-US>x<SUB>1</SUB>=x<SUB>0</SUB>+t<SUB>x </SUB></SPAN><SPAN
style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>y<SUB>1</SUB>=y<SUB>0</SUB>+t<SUB>y</SUB></SPAN><SPAN
style="FONT-FAMILY: 宋體">。</SPAN></P>
<P class=a><SPAN lang=EN-US><IMG height=203 src="第2章 圖象的幾何變換.files/image002.jpg"
width=195 v:shapes="_x0000_i1025"> </SPAN></P>
<P style="TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>2.1 </B><B><SPAN
style="FONT-FAMILY: 宋體">平移的示意圖</SPAN><SPAN lang=EN-US></SPAN></B></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><SUB><IMG height=77 src="第2章 圖象的幾何變換.files/image004.gif" width=244
v:shapes="_x0000_i1067"> </SUB></SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: right"
align=right><SPAN>
</SPAN>(2.1)</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><SUB><IMG height=77 src="第2章 圖象的幾何變換.files/image006.gif" width=268
v:shapes="_x0000_i1038"> </SUB></SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: right" align=right><SPAN
lang=EN-US>(2.2)</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">這是因為:我們想知道的是平移后的圖象中每個象素的顏色。例如我們想知道,新圖中左上角點的</SPAN><SPAN
lang=EN-US>RGB</SPAN><SPAN
style="FONT-FAMILY: 宋體">值是多少?很顯然,該點是原圖的某點經過平移后得到的,這兩點的顏色肯定是一樣的,所以只要知道了原圖那點的</SPAN><SPAN
lang=EN-US>RGB</SPAN><SPAN
style="FONT-FAMILY: 宋體">值即可。那么到底新圖中的左上角點對應原圖中的哪一點呢?將左上角點的坐標</SPAN><SPAN
lang=EN-US>(0,0)</SPAN><SPAN style="FONT-FAMILY: 宋體">入公式</SPAN><SPAN
lang=EN-US>(2.2)</SPAN><SPAN style="FONT-FAMILY: 宋體">,得到</SPAN><SPAN
lang=EN-US>x<SUB>0=</SUB>-t<SUB>x </SUB></SPAN><SPAN
style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>y<SUB>0</SUB>=-t<SUB>y</SUB></SPAN><SPAN
style="FONT-FAMILY: 宋體">;所以新圖中的</SPAN><SPAN lang=EN-US>(0,0)</SPAN><SPAN
style="FONT-FAMILY: 宋體">點的顏色和原圖中</SPAN><SPAN lang=EN-US>(-t<SUB>x</SUB> ,
-t<SUB>y</SUB>)</SPAN><SPAN style="FONT-FAMILY: 宋體">的一樣。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">這樣就存在一個問題:如果新圖中有一點</SPAN><SPAN
lang=EN-US>(x<SUB>1</SUB>,y<SUB>1</SUB>)</SPAN><SPAN
style="FONT-FAMILY: 宋體">,按照公式</SPAN><SPAN lang=EN-US>(2.2)</SPAN><SPAN
style="FONT-FAMILY: 宋體">得到的</SPAN><SPAN
lang=EN-US>(x<SUB>0</SUB>,y<SUB>0</SUB>)</SPAN><SPAN
style="FONT-FAMILY: 宋體">不在原圖中該怎么辦?通常的做法是,把該點的</SPAN><SPAN
lang=EN-US>RGB</SPAN><SPAN style="FONT-FAMILY: 宋體">值統一設成</SPAN><SPAN
lang=EN-US>(0,0,0)</SPAN><SPAN style="FONT-FAMILY: 宋體">或者</SPAN><SPAN
lang=EN-US>(255,255,255)</SPAN><SPAN style="FONT-FAMILY: 宋體">。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN
style="FONT-FAMILY: 宋體">另一個問題是:平移后的圖象是否要放大?一種做法是不放大,移出的部分被截斷。例如,圖</SPAN><SPAN
lang=EN-US>2.2</SPAN><SPAN style="FONT-FAMILY: 宋體">為原圖,圖</SPAN><SPAN
lang=EN-US>2.3</SPAN><SPAN
style="FONT-FAMILY: 宋體">為移動后的圖。這種處理,文件大小不會改變。</SPAN></P>
<P class=a style="LINE-HEIGHT: 18pt"><SPAN lang=EN-US><IMG height=193
src="第2章 圖象的幾何變換.files/image008.gif" width=306 v:shapes="_x0000_i1068">
</SPAN></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>2.2 </B><B><SPAN
style="FONT-FAMILY: 宋體">移動前的圖</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
lang=EN-US><IMG height=195 src="第2章 圖象的幾何變換.files/image010.gif" width=308
v:shapes="_x0000_i1069"> </SPAN></B></P>
<P style="LINE-HEIGHT: 18pt; TEXT-ALIGN: center" align=center><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>2.3 </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>2.4</SPAN><SPAN style="FONT-FAMILY: 宋體">所示。</SPAN></P>
<P class=a style="LINE-HEIGHT: 18pt"><SPAN lang=EN-US><IMG height=244
src="第2章 圖象的幾何變換.files/image012.gif" width=362 v:shapes="_x0000_i1070">
</SPAN></P>
<P class=a style="LINE-HEIGHT: 18pt"><B><SPAN
style="FONT-FAMILY: 宋體">圖</SPAN>2.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>w<SUB>1</SUB>,h<SUB>1</SUB></SPAN><SPAN
style="FONT-FAMILY: 宋體">則新圖的寬和高變為</SPAN><SPAN
lang=EN-US>w<SUB>1</SUB>+|t<SUB>x</SUB>|</SPAN><SPAN
style="FONT-FAMILY: 宋體">和</SPAN><SPAN
lang=EN-US>h<SUB>1</SUB>+|t<SUB>y</SUB>|</SPAN><SPAN
style="FONT-FAMILY: 宋體">,加絕對值符號是因為</SPAN><SPAN lang=EN-US>t<SUB>x</SUB>,
t<SUB>y</SUB></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></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">下面的函數</SPAN><SPAN
lang=EN-US>Translation</SPAN><SPAN
style="FONT-FAMILY: 宋體">采用的是第一種做法,即移出的部分被截斷。在給出源代碼之前,先說明一個問題。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">如果你用過</SPAN><SPAN
lang=EN-US>Photoshop,Corel PhotoPaint</SPAN><SPAN
style="FONT-FAMILY: 宋體">等圖象處理軟件,可能聽說過“灰度圖”</SPAN><SPAN
lang=EN-US>(grayscale)</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>256</SPAN><SPAN style="FONT-FAMILY: 宋體">個級別,其中</SPAN><SPAN
lang=EN-US>0</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>255</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>.bmp</SPAN><SPAN
style="FONT-FAMILY: 宋體">格式的文件中,并沒有灰度圖這個概念,但是,我們可以很容易在</SPAN><SPAN
lang=EN-US>.bmp</SPAN><SPAN style="FONT-FAMILY: 宋體">文件中表示灰度圖。方法是用</SPAN><SPAN
lang=EN-US>256</SPAN><SPAN
style="FONT-FAMILY: 宋體">色的調色板,只不過這個調色板有點特殊,每一項的</SPAN><SPAN
lang=EN-US>RGB</SPAN><SPAN style="FONT-FAMILY: 宋體">值都是相同的。也就是說</SPAN><SPAN
lang=EN-US>RGB</SPAN><SPAN style="FONT-FAMILY: 宋體">值從</SPAN><SPAN
lang=EN-US>(0</SPAN><SPAN style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>0</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>1</SPAN><SPAN style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>1)</SPAN><SPAN style="FONT-FAMILY: 宋體">一直到</SPAN><SPAN
lang=EN-US>(255</SPAN><SPAN style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>255</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>0</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>255</SPAN><SPAN style="FONT-FAMILY: 宋體">,</SPAN><SPAN
lang=EN-US>255)</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>RGB</SPAN><SPAN
style="FONT-FAMILY: 宋體">外,還有一種叫</SPAN><SPAN lang=EN-US>YUV</SPAN><SPAN
style="FONT-FAMILY: 宋體">的表示方法,應用也很多。電視信號中用的就是一種類似于</SPAN><SPAN
lang=EN-US>YUV</SPAN><SPAN style="FONT-FAMILY: 宋體">的顏色表示方法。</SPAN></P>
<P style="LINE-HEIGHT: 18pt"><SPAN style="FONT-FAMILY: 宋體">在這種表示方法中,</SPAN><SPAN
lang=EN-US>Y</SPAN><SPAN style="FONT-FAMILY: 宋體">分量的物理含義就是亮度,</SPAN><SPAN
lang=EN-US>U</SPAN><SPAN style="FONT-FAMILY: 宋體">和</SPAN><SPAN
lang=EN-US>V</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></P>
<P style="LINE-HEIGHT: 18pt"><SPAN lang=EN-US>(1)<SPAN
style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋體">因為</SPAN><SPAN lang=EN-US>Y</SPAN><SPAN
style="FONT-FAMILY: 宋體">代表了亮度,所以</SPAN><SPAN lang=EN-US>Y</SPAN><SPAN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -