#java #android #opencv
#java #Android #opencv
Вопрос:
у меня проблема с отражением света, вот снимок, сделанный стандартной камерой
и процесс, который я делаю
1. blur the image
Imgproc.GaussianBlur(blurred, blurred, new Size(17, 17),
Imgproc.BORDER_ISOLATED);
2. create second empty image that using hsv
Imgproc.cvtColor(gray0, gray0, Imgproc.COLOR_BGR2HSV);
3. mix the image color chanel (fromto {0,0})
Core.mixChannels(blurredlist, graylist, fromto);
4. Threshold, Canny, and delate
Imgproc.threshold(gray0, gray0, 126, 255, Imgproc.THRESH_TRUNC);
Imgproc.Canny(gray0, gray0, 50, 70);
Imgproc.dilate(gray0, gray0, Mat.ones(new Size(3, 3), 0));
5. finding the contour
Imgproc.findContours(gray0, contours, new Mat(), Imgproc.RETR_EXTERNAL,
Imgproc.CHAIN_APPROX_SIMPLE);
6. magicall filter for biggest contour and stuff
и вот результат
как я могу удалить подсветку или соединить прерывистую линию с обнаруженным контуром?
Ответ №1:
Проблема здесь в том, что отражение перенасыщает пиксели. Здесь есть два возможных пути;
Отрегулируйте условие
Настройка условия — самый простой путь. Просто контролируя условия, при которых берется изображение, вы можете устранить большинство (если не все) сложных ситуаций (таких как эти). Подумайте об использовании поляризованных фильтров, лучшем (например, рассеянном) освещении, лучших настройках экспозиции и т. Д.
Отрегулируйте изображение
Другой вариант (например, удаление бликов после этого) намного сложнее. Это происходит главным образом потому, что перенасыщение уничтожает много данных. Наиболее часто используемым методом для этого является использование HDR-изображений, которые, как правило, сохраняют намного больше данных, поскольку изображения снимаются с разной экспозицией. В некоторых случаях проблема может возникнуть из-за необработанного преобразования; но улучшение этого, как правило, довольно утомительно.
Комментарии:
1. ну, я новичок в Android и все еще изучаю opencv, вдохновленный документами app shot play.google.com/store/apps/details?id=com.jp.shotdocs это может обнаружить бумагу в той же среде. просто интересно, какой метод они использовали…
2. Судя по всему; они предполагают, что то, что вы пытаетесь обнаружить, является квадратным. Например; Они пытаются подогнать несколько строк к точкам данных с наилучшим соответствием. Как и в этом случае, три строки могут быть установлены довольно легко (так как у вас много точек). Край слева сложнее, но все же возможен, поскольку невидима только «середина».
3. да, это определение площади… если фон четкий и не имеет отражения света, точность довольно хорошая, но отражение рядом с бумагой не позволяет распознать квадрат.
4. Если материал вашего изображения всегда так же хорош, как и в вашем примере (почти без фона / шума), вы можете попытаться обнаружить линии (например, с помощью RANSAC или HoughLines) вместо удаления эффекта отражения. Надежное обнаружение линии просто заполнит отверстие, потому что есть одна согласованная линия, которая соединяет обе стороны отверстия.
5. я читал о линиях Хауса раньше. я постараюсь интегрироваться со своим кодом и поделиться результатом для последующего обсуждения.