【发布时间】:2019-07-17 11:44:26
【问题描述】:
我正在尝试通过在 C++ 中创建 2D 统一平滑算法来减少图像中的噪点。我对每个像素使用的函数计算一个奇数平方窗口内相邻像素的平均值,并将其用作新值。
但是,每当我运行代码时,新图像中的像素都会变暗(像素值 255=白色,0=黑色)。下面是获取新像素值的函数:
int utility::windowAverage (image &src, int x, int y, int window_size)
{
int sum = 0;
int avg;
for(int i = x-(window_size/2); i < x+(window_size/2);++i)
{
for(int j = y-(window_size/2); j < y+(window_size/2);++j)
{
sum += src.getPixel(i,j);
}
}
avg = sum/(window_size*window_size);
return avg;
}
参数image &src为源图像,函数src.getPixel(i,j)返回一个0到255之间的整数,表示指定坐标(i,j)处像素的亮度。
我在 .pgm 格式的灰度图像上运行代码。
如何在保持相同亮度的同时平滑图像?
【问题讨论】:
-
您的
ints 很可能溢出。考虑使用size_t或类似的值。
标签: c++ image image-processing smoothing noise-reduction