用Visual C++实现图像平滑怎么读取BMP格式图像?

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:55:19
实现图像的预处理,二值化等方法?
平滑,又叫降噪。。我自学的课程有些地方不是很懂,来请教各位牛人。。。

MFC的话可以用CBITMAP类来处理bmp,读取的话用win32 api loadimage();
平滑不理解,平滑移动?简单点设置个后台缓冲,俗称double buffer

二值化的话先把彩色RGB的转化为黑白,比较常用的是转成亮度 Luminance=0.3 R + 0.59 G + 0.11 B,亮度的范围是0-255,把RBG都设置成亮度值,显示出来的就是黑白的了,然后设置个shreshold,比如是128,然后把亮度大于128都都设成255,小于128的都设成0

降噪的算法很多,主要有spatial filer,也可以用frequency filer,中文我不知道怎么翻,前一个不做频域变换的,后一个做了频域变换再处理。

spatial filer就是个axa的矩阵,然后对每个像素过滤。
比如
|1 2 1|
|2 4 2| X 1/16
|1 2 1|
frequency filter是做个过滤掉频域上高频的部分。
一般把一块像素区,8x8或是16x16 做2D DCT,做zigzag,然后过滤掉高频,窗口要看你的要求,然后做IDCT.出来就是你要的东西了。

平滑一般用中值滤波效果比较理想,而且你模板越大,效果越好!
二值化方法的选用可以根据实际情况来确定算法:
如目标图像的直方图呈双峰状,可以考虑用直方图法二值化,如果边缘信息很丰富(图像边缘很突出)那么可以选用基于边缘提取的二值化方法(因为二值化的阈值很明显已经在边缘上了,你只要知道边缘的位置,那么相应的阈值也就出来带来)。还有很多其他的方法,我这就不罗列了

关注