procesamiento para indexadas imagenes imagen ejemplos descomponer con comandos binarizar android bitmap binary grayscale

android - para - procesamiento de imagenes en matlab ejemplos



Android: Convierte escala de grises a imagen binaria (1)

Primero, obtienes una NullReferenceException porque bmpBinary es NULL.
En segundo lugar, para obtener un chanel de Color, puede usar int red = Color.red (pixel);
En tercer lugar, para establecer un píxel blanco use bmpBinary.setPixel (x, y, 0xFFFFFFFF);

Modifiqué tu código un poco:

public Bitmap toBinary(Bitmap bmpOriginal) { int width, height, threshold; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); threshold = 127; Bitmap bmpBinary = Bitmap.createBitmap(bmpOriginal); for(int x = 0; x < width; ++x) { for(int y = 0; y < height; ++y) { // get one pixel color int pixel = bmpOriginal.getPixel(x, y); int red = Color.red(pixel); //get binary value if(red < threshold){ bmpBinary.setPixel(x, y, 0xFF000000); } else{ bmpBinary.setPixel(x, y, 0xFFFFFFFF); } } } return bmpBinary; }

Una forma aún mejor es no utilizar solo el valor de un color chanel, sino un promedio ponderado de rojo verde y azul, por ejemplo:

int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11);

He terminado con obtener el valor en escala de grises, pero no sé cómo usar la función para convertir la escala de grises en una imagen binaria. Por favor, ayúdenme, aquí mi código de función:

public Bitmap toBinary(Bitmap bmpOriginal) { int width, height, threshold; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); threshold = 127; final Bitmap bmpBinary = null; for(int x = 0; x < width; ++x) { for(int y = 0; y < height; ++y) { // get one pixel color int pixel = bmpOriginal.getPixel(x, y); //get grayscale value int gray = (int)(pixel & 0xFF); //get binary value if(gray < threshold){ bmpBinary.setPixel(x, y, 0); } else{ bmpBinary.setPixel(x, y, 255); } } } return bmpBinary; }

aquí mi código completo:

public class MainActivity extends Activity { ImageView img; Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //convert imageview to bitmap img =(ImageView) findViewById(R.id.imageView1); BitmapDrawable drawable = (BitmapDrawable) img.getDrawable(); final Bitmap imgbitmap = drawable.getBitmap(); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //convert bitmap to grayscale Bitmap imgnew; imgnew = toGrayscale(imgbitmap); //convert to binary imgnew = toBinary(imgnew); //convert bitmap to imageview ImageView imgbit; imgbit = (ImageView) findViewById(R.id.imageView2); imgbit.setImageBitmap(imgnew); } }); } public Bitmap toGrayscale(Bitmap bmpOriginal){ int width, height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); Canvas c = new Canvas(bmpGrayscale); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(bmpOriginal, 0, 0, paint); return bmpGrayscale; } public Bitmap toBinary(Bitmap bmpOriginal) { int width, height, threshold; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); threshold = 127; final Bitmap bmpBinary = null; for(int x = 0; x < width; ++x) { for(int y = 0; y < height; ++y) { // get one pixel color int pixel = bmpOriginal.getPixel(x, y); //get grayscale value int gray = (int)(pixel & 0xFF); //get binary value if(gray < threshold){ bmpBinary.setPixel(x, y, 0); } else{ bmpBinary.setPixel(x, y, 255); } } } return bmpBinary; } }