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

📄 chap07.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:
lang=EN-US>7.4</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>。是不是很象一顶墨西哥草帽?所以,</span><span
lang=EN-US>LOG</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>又叫墨西哥草帽滤波器。</span></p>
  <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=268 height=148
src="chap07.files/image032.jpg"  v:shapes="_x0000_i1047"> </span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>7.4&nbsp;&nbsp;&nbsp;&nbsp; LOG</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:宋体;
&quot;Times New Roman&quot;'>图</span><span
lang=EN-US>7.5</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>为图</span><span lang=EN-US>7.1</span><span
style='font-family:宋体;"Times New Roman"'>用</span><span lang=EN-US>LOG</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>滤波器处理后的结果。</span></p>
  <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=303 height=192
src="chap07.files/image034.jpg"  v:shapes="_x0000_i1048"> </span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>7.5&nbsp;&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>7.1</span></b><b><span
style='font-family:宋体;"Times New Roman"'>用</span><span lang=EN-US>LOG</span></b><b><span
style='font-family:宋体;"Times New Roman"'>滤波器处理后的结果图</span><span lang=EN-US></span></b></p>
  <p style='line-height:18.0pt'><span lang=EN-US>LOG</span><span
style='font-family:宋体;"Times New Roman"'>的算法和普通模板操作的算法没什么不同,只不过把</span><span lang=EN-US>3</span><span
style='font-family:宋体;"Times New Roman"'>×</span><span lang=EN-US>3</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>改成了</span><span
lang=EN-US>5</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>×</span><span lang=EN-US>5</span><span
style='font-family:宋体;"Times New Roman"'>,这里就不再给出了。读者可以参照第</span><span lang=EN-US>3</span><span
style='font-family:宋体;"Times New Roman"'>章的源程序自己来完成。</span></p>
  <h2> <span
lang=EN-US>7.2</span> <a name="_Toc486331899"></a><a  
name="_Toc486332899"></a><a name="_Toc486339008"></a><a name="_Toc454810873"></a><a
name="_Toc454856647"><span><span>Hough</span></span></a><span><span><span style='font-family:黑体;'>变换</span></span></span></h2>
  <p style='line-height:18.0pt'><span
lang=EN-US>Hough</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>变换用来在图象中查找直线。它的原理很简单:假设有一条与原点距离为</span><span
lang=EN-US>s</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,方向角为θ的一条直线,如图</span><span lang=EN-US>7.6</span><span
style='font-family:宋体;"Times New Roman"'>所示。</span></p>
  <p align=center style='text-align:center;
line-height:18.0pt'><span lang=EN-US> <img width=232 height=178
src="chap07.files/image036.jpg"  v:shapes="_x0000_i1049"> </span></p>
  <p align=center style='text-align:center;
line-height:18.0pt'><b><span style='font-family:宋体;
&quot;Times New Roman&quot;'>图</span>7.6&nbsp;&nbsp;&nbsp; </b><b><span  
style='font-family:宋体;"Times New Roman"'>一条与原点距离为</span><span lang=EN-US>s</span></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:宋体;
&quot;Times New Roman&quot;'>直线上的每一点都满足方程</span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US><sub> <img width=128 height=21
src="chap07.files/image038.gif"  v:shapes="_x0000_i1050"> </sub> </span></p>
  <p align=right style='text-align:right;line-height:18.0pt'><span
lang=EN-US>(7.1)</span></p>
  <p style='line-height:18.0pt'><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>7.7)</span><span
style='font-family:宋体;"Times New Roman"'>。找到直线的两个端点,在它们之间连一条红色的直线。为了看清效果,将结果描成粗线,如图</span><span
lang=EN-US>7.8</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>所示。</span></p>
  <table border=0 cellspacing=0 cellpadding=0>
    <tr> 
      <td width=276 valign=top class="Normal"> 
        <p style='line-height:18.0pt'><span lang=EN-US> <img width=239 height=193
  src="chap07.files/image040.gif"  v:shapes="_x0000_i1051"> </span></p>
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>7.7 </span></b><b><span  
  style='font-family:宋体;"Times New Roman"'>原图</span><span lang=EN-US></span></b></p>
      </td>
      <td width=276 valign=top class="Normal"> 
        <p style='line-height:18.0pt'><span lang=EN-US> <img width=243 height=193
  src="chap07.files/image042.jpg"  v:shapes="_x0000_i1052"> </span></p>
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>7.8 Hough</span></b><b><span  
  style='font-family:宋体;"Times New Roman"'>变换的结果</span><span lang=EN-US></span></b></p>
      </td>
    </tr>
  </table>
  <p style='line-height:18.0pt'><span style='font-family:宋体;
&quot;Times New Roman&quot;'>可以看出,找到的确实是最长的直线。方法是,开一个二维数组做为计数器,第一维是角度,第二维是距离。先计算可能出现的最大距离为</span><span
lang=EN-US><sub> <img width=125 height=29
src="chap07.files/image044.gif"  v:shapes="_x0000_i1053"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>,用来确定数组第二维的大小。对于每一个黑色点,角度的变化范围从</span><span
lang=EN-US>0<sup>0</sup></span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>到</span><span
lang=EN-US>178<sup>0</sup>(</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>为了减少存储空间和计算时间,角度每次增加</span><span
lang=EN-US>2<sup>0</sup></span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>而不是</span><span
lang=EN-US>1<sup>0</sup>)</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>,按方程</span><span
lang=EN-US>(7.1)</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>求出对应的距离</span><span lang=EN-US>s</span><span
style='font-family:宋体;"Times New Roman"'>来,相应的数组元素</span><span lang=EN-US>[s][<sub> 
    <img width=13 height=19
src="chap07.files/image046.gif"  v:shapes="_x0000_i1054"> </sub> ]</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>加</span><span
lang=EN-US>1</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>。同时开一个数组</span><span lang=EN-US>Line</span><span
style='font-family:宋体;"Times New Roman"'>,计算每条直线的上下两个端点。所有的象素都算完后,找到数组元素中最大的,就是最长的那条直线。直线的端点可以在</span><span
lang=EN-US>Line</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>中找到。要注意的是,我们处理的虽然是二值图,但实际上是</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:宋体;"Times New Roman"'>和</span><span lang=EN-US>255</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>两种颜色。</span></p>
  <p style='line-height:18.0pt'><span lang=EN-US>BOOL Hough(HWND hWnd)</span></p>  
  <p style='line-height:18.0pt'><span lang=EN-US>{</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>定义一个自己的直线结构</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>typedef struct{</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;int topx; //<span  
style='font-family:宋体;"Times New Roman"'>最高点的</span><span lang=EN-US>x</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>坐标</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;int topy; //<span  
style='font-family:宋体;"Times New Roman"'>最高点的</span><span lang=EN-US>y</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>坐标</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;int botx; //<span  
style='font-family:宋体;"Times New Roman"'>最低点的</span><span lang=EN-US>x</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>坐标</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;int boty; //<span  
style='font-family:宋体;"Times New Roman"'>最低点的</span><span lang=EN-US>y</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>坐标</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;}MYLINE;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DWORD   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    OffBits,BufSize;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp; LPBITMAPINFOHEADER&nbsp;&nbsp;&nbsp;   
    lpImgData;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPSTR&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    lpPtr;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>HDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    hDc;</p>
  <p style='line-height:18.0pt'>LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    x,y;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    i,maxd;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dist,Alpha;</p>  
  <p style='line-height:18.0pt'>HGLOBAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDistAlpha,hMyLine;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp; Int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp; *lpDistAlpha;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MYLINE   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    *lpMyLine,*TempLine,MaxdLine;</p>

⌨️ 快捷键说明

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