Доброго времени суток!
Я не очень знаком с распознование изображения, поэтому буду благодарен за любой совет/направление.
Так вот, задача у меня стоит, надо распознать такое изображение
и получить булевую матрицу с результатом [0,0]=false,[0,1]=true.....[1,0]=false,[1,1]=true...
4 заполненых квадрата для стабилизации изображения надо я так понимаю, и соответственно для нахождения начала/конца.
Может мне кто либо помочь с алгоритмом? Буду писать на c#, но задача не привязана к языку поэтому если есть примеры на других яп, буду признателен.
Здравствуйте, Ops, Вы писали:
Спасибо, что то похоже я уже нашел. Я понимаю что смысл у меня тут превратить изображение в бинарное, это я же понял как.
Но дальше я не знаю куда двигаться? Т.е как мне найти прямоугольники?
Здравствуйте, superbober, Вы писали:
S>Доброго времени суток! S>Я не очень знаком с распознование изображения, поэтому буду благодарен за любой совет/направление.
S>Так вот, задача у меня стоит, надо распознать такое изображение S>и получить булевую матрицу с результатом [0,0]=false,[0,1]=true.....[1,0]=false,[1,1]=true... S>4 заполненых квадрата для стабилизации изображения надо я так понимаю, и соответственно для нахождения начала/конца.
Эта картинка с квадратами, в каком виде она подается на вход программы?
Она полутоновая/цветная или уже бинаризована? В первом случае могут ли быть колебания контраста или участки не в фокусе?
Какие искажения геометрии картинки могут быть: наклон, масштабирование, перспективные?
Здравствуйте, R.K., Вы писали:
RK>Здравствуйте, superbober, Вы писали:
S>>Доброго времени суток! S>>Я не очень знаком с распознование изображения, поэтому буду благодарен за любой совет/направление.
S>>Так вот, задача у меня стоит, надо распознать такое изображение S>>и получить булевую матрицу с результатом [0,0]=false,[0,1]=true.....[1,0]=false,[1,1]=true... S>>4 заполненых квадрата для стабилизации изображения надо я так понимаю, и соответственно для нахождения начала/конца.
RK>Эта картинка с квадратами, в каком виде она подается на вход программы? RK>Она полутоновая/цветная или уже бинаризована? В первом случае могут ли быть колебания контраста или участки не в фокусе? RK>Какие искажения геометрии картинки могут быть: наклон, масштабирование, перспективные?
Обновил картинку
Решил взять такие же квадраты ка и в qr коде. Растояния между квадратами и сами квадраты с данными на картинке.
RK>Эта картинка с квадратами, в каком виде она подается на вход программы?
Будет с web камеры фото
RK>Она полутоновая/цветная или уже бинаризована? В первом случае могут ли быть колебания контраста или участки не в фокусе?
Из проги по ссылке которую дали тут, я взял код который получается обесцвечивает ее и бинаризирует, т.е это в принципе есть.
А также находит квадраты как в qr коде по паттерну ка я понял
RK>Какие искажения геометрии картинки могут быть: наклон, масштабирование, перспективные?
Мм..сорри я не очень знаю, но так ка изображение будет с веб камеры то думаю что — наклон точно но не большой, маштаб тоже, перспективные — мм... наверно или нет?
Вот не могуль только разобраться как мне искать мои квадраты с данными? какой алгоритм поиска с учетом искажений геометрии?
S>Может мне кто либо помочь с алгоритмом? Буду писать на c#, но задача не привязана к языку поэтому если есть примеры на других яп, буду признателен.
Надо знать длину квадратиков L или вычислить предварительно.
1) создаешь список1(Х,У) -- массив в котором будут храниться крайние точки найденных квардатиков
2) проходишь по всем точкам
for x = 1 to width do
for y = 1 to height do
begin
if color(x,y)=black then
begin
проход по списку1
если список1 содержит точку, расстояние до которой меньше 1.3*L — значит ничего не делать
если список1 НЕ содержит точку, расстояние до которой меньше 1.3*L — значит добавить (х,у) в список
end;
end;
На выходе получаешь список1, который содержит крайние (верхние левые) точки черных квадратиков.
Далее анализируешь координаты в списке1 -- смотришь какие ячейки твоей матрицы заполнены.
А почему именно "расстояние до которой меньше 1.3*L — значит ничего не делать "
И я попробывал применить ваш алгоритм, но он находит не всегда верхнии углы, иногда просто границы квадрата
DR>а если найти крайние точки одного квадрата, то можно и центральные точки вычислить
DR>что бы найти другие крайние точки надо модифицировать цикл
DR> for x = 1 to width do DR> for y = 1 to height do DR>находит верхние левые точки
DR> for x = width to 1 do DR> for y = 1 to height do DR>находит верхние правые точки
DR> for x = 1 to width do DR> for y = height to 1 do DR>находит нижние левые точки
DR> for x = width to 1 do DR> for y = height to 1 do DR>находит нижние правые точки
Здравствуйте, superbober, Вы писали:
S>Обновил картинку S>
S>Решил взять такие же квадраты ка и в qr коде. Растояния между квадратами и сами квадраты с данными на картинке.
RK>>Эта картинка с квадратами, в каком виде она подается на вход программы? S>Будет с web камеры фото
RK>>Она полутоновая/цветная или уже бинаризована? В первом случае могут ли быть колебания контраста или участки не в фокусе? S>Из проги по ссылке которую дали тут, я взял код который получается обесцвечивает ее и бинаризирует, т.е это в принципе есть. S>А также находит квадраты как в qr коде по паттерну ка я понял
RK>>Какие искажения геометрии картинки могут быть: наклон, масштабирование, перспективные? S>Мм..сорри я не очень знаю, но так ка изображение будет с веб камеры то думаю что — наклон точно но не большой, маштаб тоже, перспективные — мм... наверно или нет?
S>Вот не могуль только разобраться как мне искать мои квадраты с данными? какой алгоритм поиска с учетом искажений геометрии?
Если известны примерные размеры внешних квадратов, а также процент мусора в них (белых пикселей), то для их нахождения можно применить морфологию.
А именно фильтр порядковой статистики (Rank filter) со структурирующим элементом (SE) равным внешнему квадрату (а лучше даже с вписанным в квадрат диском для игнорирования поворота).
Медианный фильтр (Median filter) является его частным случаем, когда порядок равен 50%.
Например, известно, что процент мусора не превышает 20%. Тогда после применения 80%-фильтра на картинке останутся только те точки, которые были в середине квадратов, а весь более мелкий мусор отфильтруется.
Потом можно найти выпуклую оболочку (Convex hull) этих точек — крайние точки слева и сверху и будут центрами искомых квадратов.
По их координатам можно вычислить матрицу преобразования и скомпенсировать исходную картинку обратной матрицей.
Для подавления мусора внутренние квадраты тоже можно фильтровать порядковой статистикой (после компенсации геометрии можно использовать квадрат в качестве SE).
S>Заранее огоромное спасибо