二值图象显示--图案法

上传人:第*** 文档编号:37704242 上传时间:2018-04-21 格式:DOC 页数:5 大小:540KB
返回 下载 相关 举报
二值图象显示--图案法_第1页
第1页 / 共5页
二值图象显示--图案法_第2页
第2页 / 共5页
二值图象显示--图案法_第3页
第3页 / 共5页
二值图象显示--图案法_第4页
第4页 / 共5页
二值图象显示--图案法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《二值图象显示--图案法》由会员分享,可在线阅读,更多相关《二值图象显示--图案法(5页珍藏版)》请在金锄头文库上搜索。

1、二值图象显示二值图象显示-图案法图案法图案法(patterning)是指灰度可以用一定比例的黑白点组成的区域表示,从而达到整体图象的灰度感。黑白点的位置选择称为图案化。在具体介绍图案法之前,先介绍一下分辨率的概念。计算机显示器,打印机,扫描仪等设备的一个重要指标就是分辨率,单位是dpi(dot per inch),即每英寸点数,点数越多,分辨率就越高,图象就越清晰。让我们来计算一下,计算机显示器的分辨率有多高。设显示器为15英寸(指对角线长度),最多显示12801024个点。因为宽高比为4:3,所以宽有12英寸,高有9英寸,则该显示器的水平分辨率为106dpi,垂直分辨率为113.8dpi。一

2、般的激光打印机的分辨率有 300dpi300dpi,600dpi600dpi,720dpi720dpi。所以打出来的图象要比计算机显示出来的清晰的多。扫描仪的分辨率要高一些,数码相机的分辨率更高。言归正传,前面讲了,图案化使用图案来表示象素的灰度,那么我们来做一道计算题。假设有一幅2401808bit的灰度图,当用分辨率为300dpi300dpi的激光打印机将其打印到12.89.6英寸的纸上时,每个象素的图案有多大?这道题很简单,这张纸最多可以打(30012.8) (3009.6)=38402880个点,所以每个象素可以用(3840/240)(2880/180)=1616个点大小的图案来表示,

3、即一个象素256个点。如果这1616的方块中一个黑点也没有,就可以表示灰度256;有一个黑点,就表示灰度255;依次类推,当都是黑点时,表示灰度0。这样,1616的方块可以表示257级灰度,比要求的8bit共256级灰度还多了一个。所以上面的那幅图的灰度级别完全能够打印出来。这里有一个图案构成的问题,即黑点打在哪里?比如说,只有一个黑点时,我们可以打在正中央,也可以打1616的左上角。图案可以是规则的,也可以是不规则的。一般情况下,有规则的图案比随即图案能够避免点的丛集,但有时会导致图象中有明显的线条。如图4.1中,22的图案可以表示5级灰度,当图象中有一片灰度为的1的区域时,如图4.2所示,

4、有明显的水平和垂直线条。如果想存储256级灰度的图案,就需要2561616的二值点阵,占用的空间还是相当可观的。有一个更好的办法是:只存储一个整数矩阵,称为标准图案,其中的每个值从0到255。图象的实际灰度和阵列中的每个值比较,当该值大于等于灰度时,对应点打一黑点。下面举一个25级灰度的例子加以说明。图4.4中,左边为标准图案,右边为灰度为15的图案,共有10个黑点,15个白点。其实道理很简单,灰度为0时全是黑点,灰度每增加1,减少一个黑点。要注意的是,55的图案可以表示26种灰度,当灰度是25才是全白点,而不是灰度为24时。下面介绍一种设计标准图案的算法,是由Limb在1969年提出的。先以

5、一个22的矩阵开始:设M1= 通过递归关系有Mn+1=,其中Mn和Un均为2n2n的方阵,Un的所有元素都是1。根据这个算法,可以得到M2=,为16级灰度的标准图案。M3(88阵)比较特殊,称为Bayer抖动表。M4是一个1616的矩阵。根据上面的算法,如果利用M3一个象素要用88的图案表示,则一幅NN的图将变成8N8N大小。如果利用M4,就更不得了,变成16N16N了。能不能在保持原图大小的情况下利用图案化技术呢?一种很自然的想法是:如果用M2阵,则将原图中每88个点中取一点,即重新采样,然后再应用图案化技术,就能够保持原图大小。实际上,这种方法并不可行。首先,你不知道这88个点中找哪一点比

6、较合适,另外,88的间隔实在太大了,生成的图象和原图肯定相差很大,就象图4.1最右边的那幅图一样。我们可以采用这样的做法:假设原图是256级灰度,利用Bayer抖动表,做如下处理 if (gyx2) bayery BOOL LimbPatternM3(HWND hWnd) DWORD OffBits,BufSize LPBITMAPINFOHEADER lpImgData; LPSTR lpPtr; HLOCAL hTempImgData; LPBITMAPINFOHEADER lpTempImgData; LPSTR lpTempPtr; HDC hDc; HFILE hf; LONG x,

7、y; unsigned char num; OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER); BufSize=OffBits+bi.biHeight*LineBytes;/要开的缓冲区大小 if(hTempImgData=LocalAlloc(LHND,BufSize)=NULL) MessageBox(hWnd,“Error alloc memory!“,“Error Message“,MB_OK| MB_ICONEXCLAMATION);return FALSE; lpImgData=(LPBITMAPINFOHEADER)GlobalLock(

8、hImgData); lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); /拷贝头信息和位图数据 memcpy(lpTempImgData,lpImgData,BufSize); for(y=0;y2) BayerPatterny /打白点else *(lpTempPtr+)=(unsigned char)0; /打黑点 if(hBitmap!=NULL)DeleteObject(hBitmap); hDc=GetDC(hWnd); /形成新的位图 hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFO

9、HEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+ sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); hf=_lcreat(“c:limbm3.bmp“,0); _lwrite(hf,(LPSTR) _lwrite(hf,(LPSTR)lpTempImgData,BufSize); _lclose(hf); /释放内存和资源 ReleaseDC(hWnd,hDc); LocalUnlock(hTempImgData); LocalFree(hTempImgData); GlobalUnlock(hImgData); return TRUE;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号