// http://www.androiddevelopersolution.com/2013/12/android-make-image-sharper-android.html
Image Before:
Image After :
1. ImageHelper.java : This is our helper class which helps in processing image
sharper/
Now, In our Activity class we need to add following code:
Now set image on image view
And, here we are using Convolution Matrix Theorem to make image sharper.
Image Before:
sharper/
package com.exampl.imagerun;
import android.graphics.Bitmap;
import android.graphics.Color;
public class ImageHelper
{
public static final int SIZE = 3;
public double[][] Matrix;
public double Factor = 1;
public double Offset = 1;
//Constructor with argument of size
public ImageHelper(int size) {
Matrix = new double[size][size];
}
public void setAll(double value) {
for (int x = 0; x < SIZE; ++x) {
for (int y = 0; y < SIZE; ++y) {
Matrix[x][y] = value;
}
}
}
public void applyConfig(double[][] config) {
for(int x = 0; x < SIZE; ++x) {
for(int y = 0; y < SIZE; ++y) {
Matrix[x][y] = config[x][y];
}
}
}
public static Bitmap computeConvolution3x3(Bitmap src, ImageHelper matrix) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap result = Bitmap.createBitmap(width, height, src.getConfig());
int A, R, G, B;
int sumR, sumG, sumB;
int[][] pixels = new int[SIZE][SIZE];
for(int y = 0; y < height - 2; ++y) {
for(int x = 0; x < width - 2; ++x) {
// get pixel matrix
for(int i = 0; i < SIZE; ++i) {
for(int j = 0; j < SIZE; ++j) {
pixels[i][j] = src.getPixel(x + i, y + j);
}
}
// get alpha of center pixel
A = Color.alpha(pixels[1][1]);
// init color sum
sumR = sumG = sumB = 0;
// get sum of RGB on matrix
for(int i = 0; i < SIZE; ++i) {
for(int j = 0; j < SIZE; ++j) {
sumR += (Color.red(pixels[i][j]) * matrix.Matrix[i][j]);
sumG += (Color.green(pixels[i][j]) * matrix.Matrix[i][j]);
sumB += (Color.blue(pixels[i][j]) * matrix.Matrix[i][j]);
}
}
// get final Red
R = (int)(sumR / matrix.Factor + matrix.Offset);
if(R < 0) { R = 0; }
else if(R > 255) { R = 255; }
// get final Green
G = (int)(sumG / matrix.Factor + matrix.Offset);
if(G < 0) { G = 0; }
else if(G > 255) { G = 255; }
// get final Blue
B = (int)(sumB / matrix.Factor + matrix.Offset);
if(B < 0) { B = 0; }
else if(B > 255) { B = 255; }
// apply new pixel
result.setPixel(x + 1, y + 1, Color.argb(A, R, G, B));
}
}
// final image
return result;
}
}
Now, In our Activity class we need to add following code:
ImageView imageView=(ImageView)findViewById(R.id.image);
Now set image on image view
image.setImageBitmap(sharpenImage(BitmapFactory.
decodeResource(getResources(),images[i]),12));
And, here we are using Convolution Matrix Theorem to make image sharper.
public Bitmap sharpenImage(Bitmap src, double weight) {
// set sharpness configuration
double[][] SharpConfig = new double[][] { { 0, -2, 0 },
{ -2, weight, -2 }, { 0, -2, 0 } };
// create convolution matrix instance
ImageHelper convMatrix = new ImageHelper(3);
// apply configuration
convMatrix.applyConfig(SharpConfig);
// set weight according to factor
convMatrix.Factor = weight - 8;
return ImageHelper.computeConvolution3x3(src, convMatrix);
}
No comments:
Post a Comment