图像处理算法的性能评估

图像处理原理

关于图象,要明确图片是由各个相素点组合而成,每个相素点又是由R,G,B不同比例混和而成,当明白了成相原理,当我们想对图片进行颜色处理,譬如滤镜效果,就可以通过改变R,G,B的比例值从而达到我们期望的颜色效果。

 

分析
安卓中提供图片颜色处理的方法类,可以进行色相,明度,饱和度的调整来实现对图片颜色特效的处理,在色彩丰富的彩屏上,颜色的渲染效果很好,图片处理结果也很好,而在电子书上,由于是墨水屏,可支持的色调就是16种可配的黑白灰,所以最好是将图片处理为灰度图片,再进行显示,效果会更加美观。进行图象处理,调配RGB的值,实质上也就是一些图象处理的配比算法,比如运用在电子书上的灰度算法就是RGB三者的配比相同。

 

算法代码:
public Bitmap ConvertGrayImg(int resID)
{
Bitmapimg1=((BitmapDrawable)getResources().getDrawable(resID)).getBitmap();  //首先要得到原图
//得到原图的长,宽,即图片的大小
int w=img1.getWidth(),h=img1.getHeight();
int[] pix = new int[w * h];  //设置一个和图片大小一样大的数组,用于存放相素值
img1.getPixels(pix, 0, w, 0, 0, w, h);  //得到相素点的值
int alpha=0xFF<<24;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
// 获得像素的颜色
int color = pix[w * i + j];
int red = ((color & 0x00FF0000) >> 16);
int green = ((color & 0x0000FF00) >> 8);
int blue = color & 0x000000FF;
color = (red + green + blue)/3;
color = alpha | (color << 16) | (color << 8) | color;
pix[w * i + j] = color;  //将改变后的像素值重置
}
}
Bitmap result=Bitmap.createBitmap(w, h, Config.ARGB_4444);  //创建一张新图 Config.ARGB_4444:这个参数,是可支持16种色度值
result.setPixels(pix, 0, w, 0, 0,w, h); //将最终改变后的的相素值设置给新的图片
return result;
}

 

分析结果

这段代码是显示在电子书上效果最好的,能够淡出图片过渡的感觉,没有那么分明的一块,一块的显示感觉。
不足的地方就是此款效率低,由于是通过遍历并修改每个像素点的值,所以比较消耗时间,不过处理速度比较快,因为图片的大小都不大,处理出结果也是非常快的,其实一般做开发,采取的都是用安卓给我们提供的类方法进行图象的处理,速度快且效率高。然而安卓中处理成灰度效果的接口并不适用于电子书上,效果不好。

 

自定义算法和安卓内置API的性能对比

显然,API的效率快,不过在电子书上的显示效果不理想。

 

最后总结

关于图片处理,循环遍历每个相素点,对于较小的图片,效果好且用时不是太多(小于100KB),如果图片大于300KB,用户体验就差了,所以可在图片小于100KB的时候进行图像算法处理,否则不予处理。

你可能感兴趣的:(图像处理算法的性能评估)