在不使用Android中的任何库的情况下分离图像中的对象

时间:2015-12-14 05:03:06

标签: android image object detection

正在创建一个应用程序,它可以检测图像中的圆圈/点(可能是不规则的)。为了检测它,我将RGB图像转换为二进制。使用阈值,我得到了下面给出的样本二进制图像。

enter image description here

在图像中,我想消除两个更大的形状,我想要检测小点/圆,而不使用像OpenCV4android这样的任何库。请帮我解决这个问题。

以下是将图像转换为二进制文件的程序:

public class MainActivity extends Activity {

    ImageView img;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button)findViewById(R.id.button);

        //convert imageview to bitmap
        img =(ImageView) findViewById(R.id.imageView);
        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 = 65;
        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,0xFFFFFFFF );
                } else{
                    bmpBinary.setPixel(x, y,0xFF000000 );
                }

            }
        }
        return bmpBinary;
    }

}

0 个答案:

没有答案