数字图像处理——取阈值的领域平均法

实现原理

  1. 领域平均法的决策过程:在领域平均法中,每个像素点的灰度值是否被其邻域内像素的灰度平均值替代,取决于该像素灰度值与邻域灰度平均值之差是否超过预设的阈值T。这种方法可以避免对图像进行全局的均值滤波,从而在平滑噪声的同时保留边缘细节。
  2. 阈值T的作用:阈值T是领域平均法中的关键参数,它决定了像素点是否参与平均过程。较大的阈值意味着只有当像素与其邻域平均值差异较大时,才会被平滑处理,从而减少图像的模糊程度,但可能无法有效去除噪声。较小的阈值则可能导致图像过度平滑,丢失细节。
  3. 邻域大小的影响:邻域的大小直接影响平滑效果。较大的邻域可以提供更好的平滑效果,但也可能导致图像细节的丢失。选择合适的邻域大小对于平衡图像的平滑度和细节保留至关重要。

实现代码

BOOL CAView::ThSmooth(LPBYTE lpDIBBits, LONG lWidth, LONG lHeight)

{

    LPBYTE lpSrc; // 像素指针

    LONG lLineBytes; // 每行字节数

    lLineBytes = WIDTHBYTES(lWidth * 8);

    long i, j; // 循环变量



    LPBYTE lpNewDIBBits;

    HLOCAL hNewDIBBits;

    hNewDIBBits = LocalAlloc(LPTR, lWidth * lHeight);

    lpNewDIBBits = (LPBYTE)LocalLock(hNewDIBBits);



    int T = 20; // 阈值

    int n = 3; // 邻域大小 2*n+1

    int cnt = (2 * n + 1) * (2 * n + 1);

    for (int i = 0; i < lHeight; i++) {

         for (int j = 0; j < lWidth; j++) {

             int tem = i * lWidth + j;

             int sum = 0;

             for (int x = -n; x <= n; x++) {

                  for (int y = -n; y <= n; y++) {

                      int ni = i + x < 0 ? 0 : i + x;

                      ni = ni >= lHeight ? lHeight - 1 : ni;

                      int nj = j + y < 0 ? 0 : j + y;

                      nj = nj >= lWidth ? lWidth - 1 : nj;//防止越界



                      int cur = ni * lWidth + nj;

                      sum += lpDIBBits[cur];

                  }

             }

             float avg = sum * 1.0 / cnt;

             if (abs((float)lpDIBBits[tem] - avg) > T) {//超过阈值,做平滑

                  lpNewDIBBits[tem] = avg; // 使用邻域平均值

             }

             else {

                  lpNewDIBBits[tem] = lpDIBBits[tem]; // 保持原像素值

             }

         }

    }



    memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

    LocalUnlock(hNewDIBBits);

    LocalFree(hNewDIBBits);

    return TRUE;

}

实验结果

 

图 1 阈值=20,窗口大小=3*3    原图(左)效果图(右)

 

图 2 阈值=20,窗口大小=5*5    原图(左)效果图(右)

 

图 3 阈值=20,窗口大小=7*7    原图(左)效果图(右)

固定阈值不变,通过改变窗口的大小,对比以上图可以发现,窗口越大,平滑效果越好。

 

图 4 窗口大小=7*7,阈值=7    原图(左)效果图(右)

 

图 5 窗口大小=7*7,阈值=15    原图(左)效果图(右)

 

图 6 窗口大小=7*7,阈值=50    原图(左)效果图(右)

固定窗口大小不变,改变阈值大小,从以上图对比可见,阈值越大,图像的模糊程度越小,但是平滑效果没有那么好。

实验结论

  1. 领域平均法的有效性

实验结果表明,领域平均法是一种有效的图像平滑技术,尤其是在降低噪声和改善图像质量方面。

  1. 阈值T的选择

阈值T的选择对图像平滑效果有显著影响。较大的阈值有助于保留图像细节,但可能无法有效去除噪声;较小的阈值可能导致图像过度平滑,丢失重要细节。

  1. 邻域大小的影响

邻域大小对平滑效果有直接影响。较大的邻域可以提供更好的平滑效果,但也可能导致图像细节的丢失。实验中,3x3的窗口大小在平滑效果和细节保留之间取得了较好的平衡。

实验心得

本次作业要完成的算法与之前的图像平滑操作类似,只需在原有代码基础上修改判断条件即可。在实现过程中,还是会有困难之处,比如如何正确地实现阈值判断和如何优化算法性能,有时因为没有处理好边界问题导致图片变暗,没有达到预期效果。最后还是通过思考和检查发现问题所在,处理好后实现正确效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值