Как выполнить Prewitt Edge Detection с помощью openCV в андроид студии? - PullRequest
0 голосов
/ 22 января 2019

Я создаю приложение для Android с использованием OpenCV для сравнения сходства изображений для обнаружения аномалий продуктов. Я уже пробовал операторы Canny, Sobel и Prewitt в Python, и Prewitt дал мне лучшие результаты в моем случае, поскольку продукт содержит несколько объектов. Теперь мне нужно сделать это в Android с помощью OpenCV для Android, но я не могу найти никаких документов, используя детектор края Prewitt на Android.

Я пробовал краевые детекторы Canny и Sobel на Android, но результаты разочаровывают. Любая помощь будет оценена.

Edit: Это результат оператора Prewitt в Python

https://i.imgur.com/RBAZgFj.png

И это результат оператора Canny в Python

https://i.imgur.com/I16mJ5i.png

Итак, как вы можете заметить, Prewitt более точен в моем случае.

Редактировать 2: Я сделал некоторые изменения в своем коде Java, и я свяжу новый вывод и код ниже

https://i.imgur.com/LMeFvNK.png

    @Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

    //rgbImage = inputFrame.rgba();

   // return findLargestRectangle(rgbImage);

    mat = inputFrame.rgba();
    Mat mRgbaT = mat.t();
    Core.flip(mat.t(), mRgbaT, 1);
    Imgproc.resize(mRgbaT, mRgbaT, mat.size());
    Imgproc.cvtColor(mRgbaT, gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.equalizeHist(gray, gray);
    //Imgproc.threshold(gray, gray, 127.5, 255.0, Imgproc.THRESH_OTSU);
    Imgproc.adaptiveThreshold(gray, gray, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 40);
   // Imgproc.Canny(gray, cannyImg, 50, 80);
   // Imgproc.Canny(gray, cannyImg, 50, 200, 3, false);


    Imgproc.GaussianBlur(gray, gray, new Size(5, 5), 5);
    final Point anchor = new Point(-1, -1);
    final int iterations = 2;
    Imgproc.erode(gray, cannyImg, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3)), anchor, iterations);
   // Imgproc.dilate(gray, cannyImg, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3)), anchor, iterations);
    Imgproc.Canny(gray, cannyImg, 50, 200, 3, false);
    return cannyImg;

}

Затем я просто удалил GaussianBlur и вот результат

https://i.imgur.com/qYHAK6C.png

...