使用卷积的Android中位数过滤器

时间:2016-03-22 03:20:19

标签: android graphics filter convolution median

我已经使用Android卷积实现了一个基本的Sharpen过滤器,如图所示(代码是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);
    }

除了产生中值(或平均值)滤波器而不是锐化之外,我该如何做类似的事情呢?我似乎无法找到矩阵配置应该是什么......

1 个答案:

答案 0 :(得分:1)

中位数滤波器不是卷积滤波器。它是一个非线性滤波器。如上所述(来自西安大略大学的幻灯片Link): enter image description here

要计算中值滤波器,您必须创建自己的卷积函数,而不是对邻域中的像素求和,您必须从中获取中值。

对于均值滤波器,卷积矩阵将是(已经应用了你的计数器):

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
        };