Программа по распознаванию изображений по их геометрической форме.
Определение изображения происходит путем перевода в формат полутонов и наложения фильтра Щарра для определения границ. Алгоритм определения заключается в рассмотрении расстояния до контура объектов. Используемые библиотеки - skimage
и matplotlib
.
Алгоритм распознавания изображения по форме основан на методе выделения контура путем вычисления значения яркости по координатам изображения. Для успешного выделения контура предполагается, что яркость объекта и фона существенно отличаются друг от друга. Для более точного определения изображения используются различные операторы выделения границ. Фильтры, выделяющие контурные линии, можно отнести к высокочастотным фильтрам, т.е. подавляющим низкочастотную составляющую изображения. Теоретически на результирующем изображении яркость должна быть отлична от нуля только у пикселей, входящих в контурную линию, однако из-за наличия шумовых помех такого эффекта удается достичь не всегда.
Большим недостатком других операторов (особенно Собеля) является отсутствие полной вращательной симметрии. Оператор Щарра существенно снижает отрицательные эффекты за счет использования измененных ядер свертки. Данный оператор более чувствителен при извлечении границы и способен извлекать меньшие границы. Однако отсюда повышается вероятность ошибки, поэтому большая чувствительность может быть рискованной.
Программа сравнивает изображения двух различных фруктов - мандарина и груши. Поскольку фрукты сильно отличаются по форме, данный алгоритм позволяет наиболее точно определить необходимый нам фрукт.
Обработка изображений реализована с помощью библиотеки skimage
, которая считывает изображения, переводит их в формат полутонов и накладывает фильтр Щарра. После наложения фильтра происходит рассчет суммы значений яркости изображения в пикселях по горизонтали и вертикали. Если очертания изображения касаются рамок - программа определяет изображение, как мандарин. Если же от какой-либо из осей есть значительное отдаление - программа выводит сообщение, что данное изображение - груша.
// Алгоритм определения изображения
for i in range(20):
sum1 += img1Scharr[50][i]
sum2 += img1Scharr[i][50]
sum3 += img2Scharr[50][i]
sum4 += img2Scharr[i][50]
if sum1 < 1 and sum2 > 1:
print('First image is tangerine')
else:
print('First picture is pear')
if sum3 < 1 and sum4 > 1:
print('Second image is tangerine')
else:
print('Second picture is pear')