我只想询问您是否建议简单地描述Image smoothing
。
感谢。
答案 0 :(得分:10)
与所提到的一些评论者一样,图像平滑可能意味着很多事情。主要是,当有人使用该术语时,他们的意思是模糊或低通过滤。这些通常用于同义词。模糊的想法对我们来说是直观的视觉生物,但它究竟意味着什么?
当使用相机镜头失焦时,这意味着从物体反射的光线混合在我们的视野中。这是代表专注愿景的图片:
以下是代表模糊或非焦点愿景的类似图表:
为了以数字方式再现此效果,让我们拍摄图像的每个像素,并将其替换为自身及其相邻的八个像素的平均值:
上图是7x7黑色方块内单个白色像素的图像。请注意,它只是一个白色像素,而不是整个像素的像素,只是非常夸张。在标准的8位图像表示中,这表示为以下
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
当我们执行平均时,用每个像素替换它周围3x3方形的所有像素的平均值(包括原始像素,我们得到
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 28 28 0 0 0 0 28 28 28 0 0 0 0 28 28 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
以上数字是整数,因为到目前为止我们只进行了整数运算,所以让我们保持一致。
现在看起来可能不像平滑,但让我们看看另一个例子。下面是一个更改0和255像素值的棋盘图像。
现在让我们将每个像素替换为4x4平方的平均值,其中原始像素的位置如下:
. . . . . X . . . . . . . . . .
你看,由于棋盘图案,每个这样的正方形的平均值将是255/2 = 127(再次整数除法)。棋盘像素的改变在像素到像素之间非常激烈。从任何像素到其邻居,我们从最高可能像素值到最低可能像素值。这称为高频内容。平均时,我们会删除此高频分量,因此,在信号处理术语中,我们执行高阻滤波或同义地低通滤波。不要担心边缘有奇怪的瑕疵。它们在那里是因为当在图像的边缘上进行滤波时,我们缺少要平均的像素,因此我们假设图像之外的所有内容都只是黑色。
让我们在常规灰度图像上执行相同类型的平均。下面是着名的Lenna图片。它旁边是使用7x7平均掩码的平均版本。你可以看到它是平滑的或模糊。
这是通过平均进行图像平滑的一个非常简单的例子。平均只是低通滤波的一种特殊情况。通常,我们执行加权平均以实现所需的低通滤波器效果。为了进一步阅读,我建议查找滤波器理论和卷积。
我希望这会有所帮助。
答案 1 :(得分:2)
Image Smoothing
通常与Low Pass Filtering
或getting rid of the high frequencies
同义。
背景 - 什么是过滤:
大多数人都明白过滤是直觉的。你拿东西并通过一个过滤器并删除一些东西,输出没有你过滤掉的物质。在图像/ 2d和1d信号中,您可以过滤。
在2d或1d图像上实现过滤的方法是对输入x和过滤器h进行卷积,以创建输出y。
以下是我在5分钟内编写的1d卷积示例,但没有检查错误:
void conv(float *x, int x_len, float * h, int h_len, float * y, int y_len)
{
int i;
register double accum;
for(i = 0; i < x_len-h_len-1; i++) {
accum = 0;
for(j = 0; j < h_len; j++) {
accum += x[i+j] * h[j];
}
y[i] = accum;
}
}
int main {
float x[] = {...};
int x_len = sizeof(x)/sizeof(x[0]);
float h[] = {...};
int h_len = sizeof(h)/sizeof(h[0]);
float y[x_len-h_len-1] = {0};
int y_len = x_len-h_len-1;
conv(x,x_len,h,h_len,y,y_len);
}
注意输入信号x如何被h过滤。然后输出存储在y中。有关谷歌搜索卷积的更多信息。
低通滤波:
现在您知道如何过滤1d信号了。你可以做一个低通滤波器。要进行低通滤波器,您需要创建一个仅允许低频通过的滤波器h。最简单的低通滤波器是矩形滤波器h = ones(1,N); h = h ./ N;
(matlab代码)。更复杂的滤镜是高斯滤镜(这在图像处理中非常常用。请参阅Photoshop / Gimp并查找“高斯模糊”)。有无限的方法来创建低通滤波器。
要创建自定义低通滤波器,请使用Parks-McClellan_filter_design_algorithm创建任意特定的低通滤波器。有关更多信息,请搜索谷歌“创建低通滤波器”。
最后回答你的问题 - 图像平滑:
要进行图像平滑,你在1d中做同样的事情,但每次看到一个for循环时,你都有一个双循环(因为你正在做一个2d信号)。
创建过滤器也很相似,但是没有1d数组过滤器,h,你的过滤器h现在是二维的。