Я разрабатываю приложение для Android, которое занимается обнаружением различных документов. Мне удалось частично поработать с распознаванием краев белого документа на белом фоне. Приложение работает хорошо только при наличии искусственного света, но с естественным светом (утром), который поступает в боковом направлении, документ (белый на белом фоне) никогда не идентифицируется.
Появляется та же проблемамежду разными телефонами и разными камерами. Например, он работает с Samsung S10 и не работает с Xiaomi MiA1.
Это реальная причина:
Изображение реальной причины
Делая обнаружение утром, это изображение, которое я получаю:
После medianBlur и порогового изображения.
avgCorner
- это переменная, в которой я сохраняю цвет фона для использования различных порогов.
if (avgCorner >= THRESHOLD) {
// White document on white background
Imgproc.cvtColor(mat, mGrayMat, Imgproc.COLOR_BGR2HSV, 4);
List<Mat> mats = new ArrayList<>();
Core.split(mGrayMat, mats);
mGrayMat = mats.get(1);
Imgproc.medianBlur(mGrayMat, mGrayMat, 11);
Imgproc.threshold(mGrayMat, dst, 5, 255, THRESH_BINARY_INV);
}
else {
// Dark background
Imgproc.cvtColor(mat, mGrayMat, Imgproc.COLOR_BGR2GRAY, 4);
Imgproc.threshold(mGrayMat, dst, 150, 255, THRESH_BINARY + THRESH_OTSU);
}
Кто-нибудь сталкивался с подобной проблемой? Как может быть возможна более общая реализация? Как я могу улучшить захват изображения или манипулирование?
Заранее спасибо.