Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sharpen a image in android?

I want to sharpen a image, my code is given below:

 public Bitmap RuiHuaBitmap(Bitmap bitmap) {
    int width, height;
    height = bitmap.getHeight();
    width = bitmap.getWidth();
    int red, green, blue;
    int a1, a2, a3, a4, a5, a6, a7, a8, a9;
    Bitmap bmpBlurred = Bitmap.createBitmap(width, height,bitmap.getConfig());

    Canvas canvas = new Canvas(bmpBlurred);

    canvas.drawBitmap(bitmap, 0, 0, null);
    for (int i = 1; i < width - 1; i++) {
        for (int j = 1; j < height - 1; j++) {

            a1 = bitmap.getPixel(i - 1, j - 1);
            a2 = bitmap.getPixel(i - 1, j);
            a3 = bitmap.getPixel(i - 1, j + 1);
            a4 = bitmap.getPixel(i, j - 1);
            a5 = bitmap.getPixel(i, j);
            a6 = bitmap.getPixel(i, j + 1);
            a7 = bitmap.getPixel(i + 1, j - 1);
            a8 = bitmap.getPixel(i + 1, j);
            a9 = bitmap.getPixel(i + 1, j + 1);

            red = (Color.red(a1) + Color.red(a2) + Color.red(a3) + Color.red(a4) + Color.red(a6) + Color.red(a7) + Color.red(a8) + Color.red(a9)) *(-1)   + Color.red(a5)*9 ;
            green = (Color.green(a1) + Color.green(a2) + Color.green(a3) + Color.green(a4) + Color.green(a6) + Color.green(a7) + Color.green(a8) + Color.green(a9)) *(-1)  + Color.green(a5)*9 ;
            blue = (Color.blue(a1) + Color.blue(a2) + Color.blue(a3) + Color.blue(a4) + Color.blue(a6) + Color.blue(a7) + Color.blue(a8) + Color.blue(a9)) *(-1)   + Color.blue(a5)*9 ;

            bmpBlurred.setPixel(i, j, Color.rgb(red, green, blue));
        }
    }
    return bmpBlurred;
}

but I cannot get the ideal effect. Can someone give more clue, or tell me what is mistake in my code?

Thank you.

like image 496
pengwang Avatar asked Aug 08 '11 09:08

pengwang


People also ask

How can I improve the image on my Android?

To edit your image to enhance its quality, tap your image in the camera roll. When the editing window opens, you'll see a number of options in the toolbar at the bottom of the screen. Tap on Tools to access features that let you crop, stretch, enhance, adjust, resize, rotate, or change the perspective of the photo.

How do you Unblur a picture on android?

The Fix Photo Blue App comes with a Fix Noise Slider that allows you to remove blur and noise at the same time. You can us the slider to remove Gaussian and Chroma noise while also enhancing the quality of your pictures. The Fix Blue Slider to fix blurred photo and the Fix Noise Slider can be used collectively.


1 Answers

You are missing range checking on the rgb values passed to Color.rgb(); you need to normalize rgb values in the [0..255] range before calling Color.rgb() method:

public static int rgb (int red, int green, int blue) Since: API Level 1

Return a color-int from red, green, blue components. The alpha component is implicity 255 (fully opaque). These component values should be [0..255], but there is no range check performed, so if they are out of range, the returned color is undefined. Parameters red Red component [0..255] of the color green Green component [0..255] of the color blue Blue component [0..255] of the color

Your convolution matrix seems good for a shapen transformation:

 0  0  0  0  0  
 0 -1 -1 -1  0
 0 -1  9 -1  0
 0 -1 -1 -1  0 
 0  0  0  0  0

if you think your effect is too strong, you could also try with:

 0  0  0  0  0  
 0  0 -1  0  0
 0 -1  5 -1  0
 0  0 -1  0  0 
 0  0  0  0  0

as an alternative

like image 133
guido Avatar answered Oct 05 '22 10:10

guido