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

最后更新于:2022-04-01 10:16:53

关于锐化效果,感觉效果并没有达到预期的效果。 处理后感觉像素变的粗糙了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-28_56f8ea7abfc72.jpg) 这涉及到数学知识,是关于拉普拉斯矩阵的应用,而本人在数学方面并不牛,所以不敢在这细讲,怕误导大家。 ~~~ long start = System.currentTimeMillis(); // 拉普拉斯矩阵 int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 }; int width = bmp.getWidth(); int height = bmp.getHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); int pixR = 0; int pixG = 0; int pixB = 0; int pixColor = 0; int newR = 0; int newG = 0; int newB = 0; int idx = 0; float alpha = 0.3F; int[] pixels = new int[width * height]; bmp.getPixels(pixels, 0, width, 0, 0, width, height); ~~~ //同样,和上一篇一样,对像素点的RGB做处理 不过这里要用上拉普拉斯矩阵,做信息修改。 以下是对像素的详细操作核心: ~~~ for (int i = 1, length = height - 1; i < length; i++) { for (int k = 1, len = width - 1; k < len; k++) { idx = 0; for (int m = -1; m <= 1; m++) { for (int n = -1; n <= 1; n++) { pixColor = pixels[(i + n) * width + k + m]; pixR = Color.red(pixColor); pixG = Color.green(pixColor); pixB = Color.blue(pixColor); newR = newR + (int) (pixR * laplacian[idx] * alpha); newG = newG + (int) (pixG * laplacian[idx] * alpha); newB = newB + (int) (pixB * laplacian[idx] * alpha); idx++; } } newR = Math.min(255, Math.max(0, newR)); newG = Math.min(255, Math.max(0, newG)); newB = Math.min(255, Math.max(0, newB)); pixels[i * width + k] = Color.argb(255, newR, newG, newB); newR = 0; newG = 0; newB = 0; } } //最后将结果返回 bitmap.setPixels(pixels, 0, width, 0, 0, width, height); long end = System.currentTimeMillis(); Log.d("may", "used time="+(end - start)); return bitmap; ~~~ 这样,锐化效果就达到了,虽然效果并不明显,本人还在优化当中。
';