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

📄 chap06.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:
style='font-family:宋体;"Times New Roman"'>释放内存及资源</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>ReleaseDC(hWnd,hDc);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LocalUnlock(hTempImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LocalFree(hTempImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GlobalUnlock(hImgData);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return   
    TRUE;</p>
  <p style='line-height:18.0pt'><span lang=EN-US>}</span></p>
  <h2> <span
lang=EN-US>6.2</span> <span lang=EN-US> </span><a name="_Toc486331893"></a><a  
name="_Toc486332893"></a><a name="_Toc486339002"></a><a name="_Toc454810867"></a><a
name="_Toc454856641"><span><span>膨胀</span></span></a></h2>
  <p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>膨胀</span><span lang=EN-US>(dilation)</span><span
style='font-family:宋体;"Times New Roman"'>可以看做是腐蚀的对偶运算,其定义是:把结构元素</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>平移</span><span lang=EN-US>a</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>后得到</span><span
lang=EN-US>B<sub>a</sub></span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>,若</span><span
lang=EN-US>B<sub>a</sub></span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>击中</span><span
lang=EN-US>X</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,我们记下这个</span><span lang=EN-US>a</span><span
style='font-family:宋体;"Times New Roman"'>点。所有满足上述条件的</span><span lang=EN-US>a</span><span
style='font-family:宋体;"Times New Roman"'>点组成的集合称做</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>被</span><span lang=EN-US>B</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>膨胀的结果。用公式表示为:</span><span
lang=EN-US>D(X)={a | Ba</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>↑</span><span  
lang=EN-US>X}=X <img width=13 height=13
src="chap06.files/image037.jpg"  v:shapes="_x0000_i1047"> B</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>,如图</span><span
lang=EN-US>6.13</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>所示。图</span><span lang=EN-US>6.13</span><span
style='font-family:宋体;"Times New Roman"'>中</span><span lang=EN-US>X</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>是被处理的对象,</span><span
lang=EN-US>B</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>是结构元素,不难知道,对于任意一个在阴影部分的点</span><span
lang=EN-US>a</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>,</span><span lang=EN-US>B<sub>a</sub></span><span
style='font-family:宋体;"Times New Roman"'>击中</span><span lang=EN-US>X</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>,所以</span><span
lang=EN-US>X</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>被</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>膨胀的结果就是那个阴影部分。阴影部分包括</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>的所有范围,就象</span><span lang=EN-US>X</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>B</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>不是对称的,</span><span
lang=EN-US>X</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>被</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>膨胀的结果和</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>被</span><span lang=EN-US> B<sup>v</sup></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>6.14</span><span
style='font-family:宋体;"Times New Roman"'>中,左边是被处理的图象</span><span lang=EN-US>X(</span><span
style='font-family:宋体;"Times New Roman"'>二值图象,我们针对的是黑点</span><span lang=EN-US>)</span><span
style='font-family:宋体;"Times New Roman"'>,中间是结构元素</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>。膨胀的方法是,拿</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>的中心点和</span><span lang=EN-US>X</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>上的点及</span><span
lang=EN-US>X</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>周围的点一个一个地对,如果</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>上有一个点落在</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>的范围内,则该点就为黑;右边是膨胀后的结果。可以看出,它包括</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>的所有范围,就象</span><span lang=EN-US>X</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=330 height=283
src="chap06.files/image039.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>6.13&nbsp;&nbsp; </b><b><span style='font-family:宋体;"Times New Roman";"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=536 height=203
src="chap06.files/image041.jpg"  v:shapes="_x0000_i1049"> </span></b></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.14&nbsp;&nbsp; </b><b><span style='font-family:宋体;"Times New Roman";"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>6.15</span><span style='font-family:
宋体;&quot;Times New Roman&quot;'>为图</span><span
lang=EN-US>6.11</span><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> <img width=352 height=176
src="chap06.files/image043.gif"  v:shapes="_x0000_i1050"> </span></p>
  <p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.15&nbsp;&nbsp; </b><b><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>图</span><span  
lang=EN-US>6.11</span></b><b><span style='font-family:宋体;"Times New Roman";"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>BOOL</span><span
style='font-family:宋体;"Times New Roman"'>变量,为真时,表示在水平方向进行膨胀运算,即结构元素</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>为</span><span lang=EN-US><sub> <img width=63 height=23
src="chap06.files/image044.gif"  v:shapes="_x0000_i1051"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>;否则在垂直方向上进行膨胀运算,即结构元素</span><span
lang=EN-US>B</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>为</span><span lang=EN-US><sub> <img width=28 height=75
src="chap06.files/image045.gif"  v:shapes="_x0000_i1052"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>。</span></p>
  <p style='line-height:18.0pt'><span lang=EN-US>BOOL Dilation(HWND hWnd,BOOL   
    Hori)</span></p>
  <p style='line-height:18.0pt'><span lang=EN-US>{</span></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'>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; lpPtr;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>HLOCAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp; hTempImgData;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPBITMAPINFOHEADER&nbsp;&nbsp;&nbsp;   
    lpTempImgData;</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;   
    lpTempPtr;</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; hDc;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>HFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hf;</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;   
    x,y;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>unsigned   
    char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    num;</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; i;</p>  
  <p style='line-height:18.0pt'><span
lang=EN-US>//</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>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'>if( NumColors!=256){&nbsp; </p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    MessageBox(hWnd,&quot;Must be a mono bitmap with grayscale palette!&quot;,</p>  
  <p style='line-height:
18.0pt'><span lang=EN-US>&quot;Error Message&quot;,MB_OK|MB_ICONEXCLAMATION);</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>return FALSE;</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//BufSize</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>为缓冲区大小</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BufSize=OffBits+bi.biHeight*LineBytes;</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;&nbsp;&nbsp;&nbsp; </span>if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>{</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    MessageBox(hWnd,&quot;Error alloc memory!&quot;,&quot;Error Message&quot;,</p>  
  <p style='line-height:18.0pt'><span
lang=EN-US>MB_OK|MB_ICONEXCLAMATION);</sp

⌨️ 快捷键说明

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