实现原理
- 领域平均法的决策过程:在领域平均法中,每个像素点的灰度值是否被其邻域内像素的灰度平均值替代,取决于该像素灰度值与邻域灰度平均值之差是否超过预设的阈值T。这种方法可以避免对图像进行全局的均值滤波,从而在平滑噪声的同时保留边缘细节。
- 阈值T的作用:阈值T是领域平均法中的关键参数,它决定了像素点是否参与平均过程。较大的阈值意味着只有当像素与其邻域平均值差异较大时,才会被平滑处理,从而减少图像的模糊程度,但可能无法有效去除噪声。较小的阈值则可能导致图像过度平滑,丢失细节。
- 邻域大小的影响:邻域的大小直接影响平滑效果。较大的邻域可以提供更好的平滑效果,但也可能导致图像细节的丢失。选择合适的邻域大小对于平衡图像的平滑度和细节保留至关重要。
实现代码
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 原图(左)效果图(右)
固定窗口大小不变,改变阈值大小,从以上图对比可见,阈值越大,图像的模糊程度越小,但是平滑效果没有那么好。
实验结论
- 领域平均法的有效性
实验结果表明,领域平均法是一种有效的图像平滑技术,尤其是在降低噪声和改善图像质量方面。
- 阈值T的选择
阈值T的选择对图像平滑效果有显著影响。较大的阈值有助于保留图像细节,但可能无法有效去除噪声;较小的阈值可能导致图像过度平滑,丢失重要细节。
- 邻域大小的影响
邻域大小对平滑效果有直接影响。较大的邻域可以提供更好的平滑效果,但也可能导致图像细节的丢失。实验中,3x3的窗口大小在平滑效果和细节保留之间取得了较好的平衡。
实验心得
本次作业要完成的算法与之前的图像平滑操作类似,只需在原有代码基础上修改判断条件即可。在实现过程中,还是会有困难之处,比如如何正确地实现阈值判断和如何优化算法性能,有时因为没有处理好边界问题导致图片变暗,没有达到预期效果。最后还是通过思考和检查发现问题所在,处理好后实现正确效果。