Android 使用卷积的中值滤波器
Android Median Filter using Convolution
我已经使用 Android 卷积实现了一个基本的锐化过滤器,如图所示(代码是 Xamarin C#,但 java 几乎相同):
private Bitmap Sharpen(Bitmap src, float weight)
{
var counter = (weight - 1)/4f*-1f;
float[] matrixSharpen =
{
0, counter, 0,
counter, weight, counter,
0, counter, 0
};
return CreateBitmapConvolve(src, matrixSharpen);
}
除了生成中值(或均值)过滤器而不是锐化之外,我该如何做类似的事情?我似乎找不到矩阵配置应该是什么...
中值滤波器不是卷积滤波器。它是一个非线性滤波器。正如此处所说(在西安大略大学 Link 的幻灯片中):
要计算中值滤波器,您必须创建自己的卷积函数,而不是对邻域的像素求和,而必须从中取中值。
关于均值滤波器,卷积矩阵将是(您的计数器已经应用):
float[] matrixMean =
{
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f,
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f,
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f
};
我已经使用 Android 卷积实现了一个基本的锐化过滤器,如图所示(代码是 Xamarin C#,但 java 几乎相同):
private Bitmap Sharpen(Bitmap src, float weight)
{
var counter = (weight - 1)/4f*-1f;
float[] matrixSharpen =
{
0, counter, 0,
counter, weight, counter,
0, counter, 0
};
return CreateBitmapConvolve(src, matrixSharpen);
}
除了生成中值(或均值)过滤器而不是锐化之外,我该如何做类似的事情?我似乎找不到矩阵配置应该是什么...
中值滤波器不是卷积滤波器。它是一个非线性滤波器。正如此处所说(在西安大略大学 Link 的幻灯片中):
要计算中值滤波器,您必须创建自己的卷积函数,而不是对邻域的像素求和,而必须从中取中值。
关于均值滤波器,卷积矩阵将是(您的计数器已经应用):
float[] matrixMean =
{
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f,
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f,
1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f
};