Как получить лучшие результаты, используя алгоритм Opencv Watershed в Android? - PullRequest
1 голос
/ 16 мая 2019

У меня есть изображение, состоящее из 3 объектов, и мне нужно извлечь эти объекты. Я попытался Watershed алгоритм, но он не работает, как ожидалось.

У меня нет хорошего понимания того, как работает этот алгоритм, поэтому я не могу понять реальную проблему.

Вот мой код

public Mat steptowatershed(Mat img)
    {
        Mat threeChannel = new Mat();

        Imgproc.cvtColor(img, threeChannel, Imgproc.COLOR_BGR2GRAY);
        Imgproc.threshold(threeChannel, threeChannel, 0, 255, Imgproc.THRESH_BINARY_INV + Imgproc.THRESH_OTSU);



        Mat fg = new Mat(img.size(),CvType.CV_8U);
        Imgproc.erode(threeChannel,fg,new Mat());

        Mat bg = new Mat(img.size(),CvType.CV_8U);
        Imgproc.dilate(threeChannel,bg,new Mat());
        Imgproc.threshold(bg,bg,1, 128,Imgproc.THRESH_BINARY_INV);

        Mat markers = new Mat(img.size(),CvType.CV_8U, new Scalar(0));
        Core.add(fg, bg, markers);
        Mat result1= new Mat();
        Imgproc.cvtColor(img, img, Imgproc.COLOR_BGRA2BGR);
        WatershedSegmenter segmenter = new WatershedSegmenter();
        segmenter.setMarkers(markers);
        result1 = segmenter.process(img);
        return result1;
    }

    public class WatershedSegmenter
    {
        public Mat markers=new Mat();

        public void setMarkers(Mat markerImage)
        {

            markerImage.convertTo(markers, CvType.CV_32SC1);
        }

        public Mat process(Mat image)
        {
            Imgproc.watershed(image,markers);
            markers.convertTo(markers,CvType.CV_8U);
            return markers;
        }
    }

Вот оригинальное изображение

enter image description here

Вот изображение результата enter image description here

Мне нужно извлечь все 3 объекта позже.

Желаю вам, ребята, помочь мне решить эту проблему.

...