Я создаю приложение для Android для обнаружения нескольких объектов на изображении, затем обрабатываю эти объекты и сравниваю их с эталонными объектами для обнаружения аномалий.
Я тестировал разные детекторы краев изображения в python, и оператор Prewitt дал мне лучший результат, как показано ниже
https://i.imgur.com/4iwOx9s.png
Для андроида я использовал детектор краев Canny, но результат не так хорош, как Prewitt, как показано ниже
https://i.imgur.com/C841Qup.png
Вот код Java, который я пробовал
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.coffret);
//compress bitmap
bmp = getResizedBitmap(bmp, 500);
Mat rgbMat = new Mat();
Utils.bitmapToMat(bmp, rgbMat);
Mat grayMat = new Mat();
Mat bwMat = new Mat();
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
Imgproc.equalizeHist(grayMat, grayMat);
Imgproc.adaptiveThreshold(grayMat, grayMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 40);
Imgproc.Canny(grayMat, bwMat, 50, 200, 3, false);
Utils.matToBitmap(bwMat, bmp);
Matrix matrix = new Matrix();
matrix.postRotate(180);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
imgView.setImageBitmap(bmp);
Как вы можете заметить, с помощью оператора Prewitt текст становится четким, а контуры более четкими.
Что я делаю не так?