关于锐化效果,感觉效果并没有达到预期的效果。

    处理后感觉像素变的粗糙了。

    数字图像处理(三)特效----锐化 - 图1

    这涉及到数学知识,是关于拉普拉斯矩阵的应用,而本人在数学方面并不牛,所以不敢在这细讲,怕误导大家。

    1. long start = System.currentTimeMillis();
    2. // 拉普拉斯矩阵
    3. int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 };
    4. int width = bmp.getWidth();
    5. int height = bmp.getHeight();
    6. Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    7. int pixR = 0;
    8. int pixG = 0;
    9. int pixB = 0;
    10. int pixColor = 0;
    11. int newR = 0;
    12. int newG = 0;
    13. int newB = 0;
    14. int idx = 0;
    15. float alpha = 0.3F;
    16. int[] pixels = new int[width * height];
    17. bmp.getPixels(pixels, 0, width, 0, 0, width, height);

    //同样,和上一篇一样,对像素点的RGB做处理

    不过这里要用上拉普拉斯矩阵,做信息修改。

    以下是对像素的详细操作核心:

    1. for (int i = 1, length = height - 1; i < length; i++)
    2. {
    3. for (int k = 1, len = width - 1; k < len; k++)
    4. {
    5. idx = 0;
    6. for (int m = -1; m <= 1; m++)
    7. {
    8. for (int n = -1; n <= 1; n++)
    9. {
    10. pixColor = pixels[(i + n) * width + k + m];
    11. pixR = Color.red(pixColor);
    12. pixG = Color.green(pixColor);
    13. pixB = Color.blue(pixColor);
    14. newR = newR + (int) (pixR * laplacian[idx] * alpha);
    15. newG = newG + (int) (pixG * laplacian[idx] * alpha);
    16. newB = newB + (int) (pixB * laplacian[idx] * alpha);
    17. idx++;
    18. }
    19. }
    20. newR = Math.min(255, Math.max(0, newR));
    21. newG = Math.min(255, Math.max(0, newG));
    22. newB = Math.min(255, Math.max(0, newB));
    23. pixels[i * width + k] = Color.argb(255, newR, newG, newB);
    24. newR = 0;
    25. newG = 0;
    26. newB = 0;
    27. }
    28. }
    29. //最后将结果返回
    30. bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    31. long end = System.currentTimeMillis();
    32. Log.d("may", "used time="+(end - start));
    33. return bitmap;

    这样,锐化效果就达到了,虽然效果并不明显,本人还在优化当中。