⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap02.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:

<html>

<!-- Mirrored from www.lgui.net/column/book1/chap02.htm by HTTrack Website Copier/3.x [XR&CO'2005], Mon, 21 Mar 2005 13:19:42 GMT -->
<head>
<meta http-equiv=Content-Type content="text/html; charset=GB2312">
<link rel=Edit-Time-Data href="http://www-scf.usc.edu/~flv/ipbook/chap02.files/editdata.mso" >
<link rel=OLE-Object-Data href="chap02.files/oledata.mso" >
<title>第2章 图象的几何变换</title>
<style><!--
.Normal
	{text-align:justify;
	text-justify:inter-ideograph;
	text-indent:0pt;
	line-height:normal;
	font-size:10.5pt;
	font-family:"Times New Roman";}
.a
	{text-align:center;
	text-indent:0pt;
	line-height:20.0pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
-->
</style>
</head>
<body lang=ZH-CN link=blue vlink=purple class="Normal" bgcolor="#FFFFFF">
<div style='layout-grid:15.6pt'> 
  <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:黑体;"Times New Roman"'>章</span> 
    </span></span><span><span><span  
style='font-family:黑体;"Times New Roman"'>图象的几何变换</span></span></span></h1>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>这一章我们将介绍图象的几何变换,包括图象的平移、旋转、镜象变换、转置、放缩等。如果你熟悉矩阵运算,你将发现,实现这些变换是非常容易的。</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:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>平移</span><span lang=EN-US>(translation)</span><span
style='font-family:宋体;"Times New Roman"'>变换大概是几何变换中最简单的一种了。</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>如图</span><span lang=EN-US>2.1</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>所示,初始坐标为</span><span
lang=EN-US>(x<sub>0</sub>,y<sub>0</sub>)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>的点经过平移</span><span
lang=EN-US>(t<sub>x</sub>,t<sub>y</sub>)(</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>以向右,向下为正方向</span><span
lang=EN-US>)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>后,坐标变为</span><span lang=EN-US>(x<sub>1</sub>,y<sub>1</sub>)</span><span
style='font-family:宋体;"Times New Roman"'>。这两点之间的关系是</span><span lang=EN-US>x<sub>1</sub>=x<sub>0</sub>+t<sub>x 
    </sub></span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,</span><span lang=EN-US>y<sub>1</sub>=y<sub>0</sub>+t<sub>y</sub></span><span
style='font-family:宋体;"Times New Roman"'>。</span></p>
  <p class=a><span lang=EN-US> <img width=195 height=203
src="chap02.files/image002.jpg"  v:shapes="_x0000_i1025"> </span></p>
  <p align=center style='text-align:center'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>2.1&nbsp;&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>平移的示意图</span><span lang=EN-US></span></b></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>以矩阵的形式表示为</span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US><sub> <img width=244 height=77
src="chap02.files/image004.gif"  v:shapes="_x0000_i1067"> </sub> </span></p>
  <p align=right style='text-align:right;line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>(2.1)</p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>我们更关心的是它的逆变换:</span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US><sub> <img width=268 height=77
src="chap02.files/image006.gif"  v:shapes="_x0000_i1038"> </sub> </span></p>
  <p align=right style='text-align:right;line-height:18.0pt'><span
lang=EN-US>(2.2)</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>这是因为:我们想知道的是平移后的图象中每个象素的颜色。例如我们想知道,新图中左上角点的</span><span
lang=EN-US>RGB</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>值是多少?很显然,该点是原图的某点经过平移后得到的,这两点的颜色肯定是一样的,所以只要知道了原图那点的</span><span
lang=EN-US>RGB</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>值即可。那么到底新图中的左上角点对应原图中的哪一点呢?将左上角点的坐标</span><span
lang=EN-US>(0,0)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>入公式</span><span lang=EN-US>(2.2)</span><span
style='font-family:宋体;"Times New Roman"'>,得到</span><span lang=EN-US>x<sub>0=</sub>-t<sub>x 
    </sub></span><span
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>y<sub>0</sub>=-t<sub>y</sub></span><span
style='font-family:宋体;"Times New Roman"'>;所以新图中的</span><span lang=EN-US>(0,0)</span><span
style='font-family:宋体;"Times New Roman"'>点的颜色和原图中</span><span lang=EN-US>(-t<sub>x</sub> 
    , -t<sub>y</sub>)</span><span  
style='font-family:宋体;"Times New Roman"'>的一样。</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>这样就存在一个问题:如果新图中有一点</span><span lang=EN-US>(x<sub>1</sub>,y<sub>1</sub>)</span><span
style='font-family:宋体;"Times New Roman"'>,按照公式</span><span lang=EN-US>(2.2)</span><span
style='font-family:宋体;"Times New Roman"'>得到的</span><span lang=EN-US>(x<sub>0</sub>,y<sub>0</sub>)</span><span
style='font-family:宋体;"Times New Roman"'>不在原图中该怎么办?通常的做法是,把该点的</span><span lang=EN-US>RGB</span><span
style='font-family:宋体;"Times New Roman"'>值统一设成</span><span lang=EN-US>(0,0,0)</span><span
style='font-family:宋体;"Times New Roman"'>或者</span><span lang=EN-US>(255,255,255)</span><span
style='font-family:宋体;"Times New Roman"'>。</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>另一个问题是:平移后的图象是否要放大?一种做法是不放大,移出的部分被截断。例如,图</span><span
lang=EN-US>2.2</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>为原图,图</span><span lang=EN-US>2.3</span><span
style='font-family:宋体;"Times New Roman"'>为移动后的图。这种处理,文件大小不会改变。</span></p>
  <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=306 height=193
src="chap02.files/image008.gif"  v:shapes="_x0000_i1068"> </span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>2.2&nbsp;&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>移动前的图</span><span lang=EN-US></span></b></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
lang=EN-US> <img width=308 height=195
src="chap02.files/image010.gif"  v:shapes="_x0000_i1069"> </span></b></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>2.3&nbsp;&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>移动后的图</span><span lang=EN-US></span></b></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>还有一种做法是:将图象放大,使得能够显示下所有部分,如图</span><span lang=EN-US>2.4</span><span
style='font-family:宋体;"Times New Roman"'>所示。</span></p>
  <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=362 height=244
src="chap02.files/image012.gif"  v:shapes="_x0000_i1070"> </span></p>
  <p class=a style='line-height:18.0pt'><b><span style='font-family:宋体;
&quot;Times New Roman&quot;'>图</span>2.4&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>移动后图象被放大</span><span lang=EN-US></span></b></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>这种处理,文件大小要改变。设原图的宽和高分别是</span><span lang=EN-US>w<sub>1</sub>,h<sub>1</sub></span><span
style='font-family:宋体;"Times New Roman"'>则新图的宽和高变为</span><span lang=EN-US>w<sub>1</sub>+|t<sub>x</sub>|</span><span
style='font-family:宋体;"Times New Roman"'>和</span><span lang=EN-US>h<sub>1</sub>+|t<sub>y</sub>|</span><span
style='font-family:宋体;"Times New Roman"'>,加绝对值符号是因为</span><span lang=EN-US>t<sub>x</sub>,   
    t<sub>y</sub></span><span
style='font-family:宋体;"Times New Roman"'>有可能为负</span><span lang=EN-US>(</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>即向左,向上移动</span><span
lang=EN-US>)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>。</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>下面的函数</span><span lang=EN-US>Translation</span><span
style='font-family:宋体;"Times New Roman"'>采用的是第一种做法,即移出的部分被截断。在给出源代码之前,先说明一个问题。</span></p>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>如果你用过</span><span lang=EN-US>Photoshop,Corel   
    PhotoPaint</span><span
style='font-family:宋体;"Times New Roman"'>等图象处理软件,可能听说过“灰度图”</span><span lang=EN-US>(grayscale)</span><span
style='font-family:宋体;"Times New Roman"'>这个词。灰度图是指只含亮度信息,不含色彩信息的图象,就象我们平时看到的黑白照片:亮度由暗到明,变化是连续的。因此,要表示灰度图,就需要把亮度值进行量化。通常划分成</span><span
lang=EN-US>0</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>到</span><span lang=EN-US>255</span><span
style='font-family:宋体;"Times New Roman"'>共</span><span lang=EN-US>256</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>个级别,其中</span><span
lang=EN-US>0</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>最暗</span><span lang=EN-US>(</span><span
style='font-family:宋体;"Times New Roman"'>全黑</span><span lang=EN-US>)</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>255</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>最亮</span><span lang=EN-US>(</span><span
style='font-family:宋体;"Times New Roman"'>全白</span><span lang=EN-US>)</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>。</span><span
lang=EN-US>.bmp</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>格式的文件中,并没有灰度图这个概念,但是,我们可以很容易在</span><span
lang=EN-US>.bmp</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>文件中表示灰度图。方法是用</span><span lang=EN-US>256</span><span
style='font-family:宋体;"Times New Roman"'>色的调色板,只不过这个调色板有点特殊,每一项的</span><span lang=EN-US>RGB</span><span
style='font-family:宋体;"Times New Roman"'>值都是相同的。也就是说</span><span lang=EN-US>RGB</span><span
style='font-family:宋体;"Times New Roman"'>值从</span><span lang=EN-US>(0</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>0</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,</span><span lang=EN-US>0)</span><span
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>(1</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>1</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,</span><span lang=EN-US>1)</span><span
style='font-family:宋体;"Times New Roman"'>一直到</span><span lang=EN-US>(255</span><span
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>255</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>255)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>。</span><span lang=EN-US>(0</span><span
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>0</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>0)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>是全黑色,</span><span lang=EN-US>(255</span><span
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>255</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,</span><span
lang=EN-US>255)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>是全白色,中间的是灰色。这样,灰度图就可以用</span><span
lang=EN-US>256</span><span style='font-family:宋体;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -