MFC处理bmp图像—滤波

本文介绍了如何使用MFC进行中值滤波图像处理。首先回顾滤波特点,接着通过MFC创建菜单项并添加事件处理程序,重写OnImageprocessingMedianfiltering()函数,实现中值滤波功能。同时,提供了GetMedianNum()和MedianFilter()函数的实现。文章鼓励读者探讨和学习MFC的更多应用。
摘要由CSDN通过智能技术生成
滤波
   无论是直接获取的灰度图像,还是由彩色图像转换得到的灰度图像,里面都有噪声的存在,噪声对图像质量有很大的影响。进行中值滤波不仅可以去除孤点噪声,而且可以保持图像的边缘特性,不会使图像产生显著的模糊,比较适合于实验中的人脸图像。

   中值滤波的基本思想是,把局部区域的像素按灰度等级进行排序,取该领域中灰度的中值作为当前像素的灰度值。
中值滤波的步骤为:
    1、将滤波模板(含有若干个点的滑动窗口)在图像中漫游,并将模板中心与图中某个像素位置重合;
    2、读取模板中各对应像素的灰度值;
    3、将这些灰度值从小到大排列;
    4、取这一列数据的中间数据,将其赋给对应模板中心位置的像素。如果窗口中有奇数个元素,中值取元素按灰度值大小排序后的中间元素灰度值。如果窗口中有偶数个元素,中值取元素按灰度值大小排序后,中间两个元素灰度的平均值。因为图像为二维信号,中值滤波的窗口形状和尺寸对滤波器效果影响很大,不同图像内容和不同应用要求往往选用不同的窗口形状和尺寸。

引用一段文字描述一下滤波的特点,通过上一篇文章的学习,我们已经学会了怎样用MFC实现基本的图像处理算法,这次我们需要实现的是中值滤波,这个算法的原理和上一篇文章的Otsu的原理我准备这两天总结一下,重写一篇文章。

下面开始用MFC实现中值滤波,我们和上一篇文章中的操作一样,在资源视图->Menu菜单->IDR-DIBTYPE里面的image processing下新建一个子菜单MedianFiltering

这里写图片描述

然后添加类向导,或者直接右键子菜单MediaFiltering添加事件处理程序

这里写图片描述

类列表选择CdibView其他默认,然后将OnImageprocessingMedianfiltering()函数重写如下:

void CDibView::OnImageprocessingMedianfiltering()
{
    // TODO: 在此添加命令处理程序代码
    // 获取文档
    CDibDoc* pDoc = GetDocument();
    // 指向DIB的指针
    LPSTR   lpDIB;
    // 指向DIB象素指针
    LPSTR   lpDIBBits;
    // 滤波器的高度
    int iFilterH;
    // 滤波器的宽度
    int iFilterW;
    // 中心元素的X坐标
    int iFilterMX;
    // 中心元素的Y坐标
    int iFilterMY;
    // 锁定DIB
    lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)pDoc->GetHDIB());

    // 找到DIB图像象素起始位置
    lpDIBBits = ::FindDIBBits(lpDIB);

    // 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的中值滤波,其它的可以类推)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值