Поиск фигур в изображении с помощью ImageMagick
У меня есть два исходных изображения:


Они кажутся эквивалентными, однако они слегка сдвинуты.
Таким образом, я создал изображение diff, где отличие от каждого изображения имеет цветовую кодировку (зеленый и красный).

Я создал его так:
convert first.png second.png
( -clone 0,1 -compose difference -composite
-threshold 0 )
( -clone 0 -clone 2 -compose minus -composite
-threshold 0 -fill green1 -opaque white
-channel rgba -fill none -opaque black )
( -clone 1 -clone 2 -compose minus -composite
-threshold 0 -fill red -opaque white
-channel rgba -fill none -opaque black )
( -clone 0,1 -evaluate-sequence mean )
-delete 0-2
-reverse
-background none
-compose over
-flatten
multicolor_difference.png
Как предлагается здесь:
Http://www.imagemagick.org/discourse-server/viewtopic.php?t=26105
Теперь я хочу иметь позиции различных зеленых и красных прямоугольников, чтобы у меня был список форм, с которыми я могу работать в коде.
Если я преобразую изображение в текст
# ImageMagick pixel enumeration: 2880,1370,255,srgb
0,0: (0,255,0) #00FF00 lime
1,0: (0,255,0) #00FF00 lime
2,0: (255,255,255) #FFFFFF white
3,0: (255,255,255) #FFFFFF white
И повторите каждый пиксель, проверяя, является ли цвет зеленоватым или красным, это, конечно, убийца производительности.
Есть ли лучший способ поиска в изображении определенных фигур? Даже проверка наличия определенного цвета была бы большим улучшением. Вывод должен быть текстовым, чтобы я мог интерпретировать его в коде.
Итак, в целом я хочу получить описание различие двух изображений в текстовой форме. В лучшем случае у меня есть только 10 выходов для каждого прямоугольника.
1 ответ:
Я не уверен, что понимаю ваш вопрос, но думаю, что смогу приблизить вас к ответу!
Я бы, возможно, генерировал ваши зеленые и красные файлы отдельно, но давайте начнем с того, что у вас есть. Если вы конвертируете ваш файл red and lime difference в черно-белый
PBMфайл, вы можете передать его вpotrace, который превратит его в векторизованныйSVGфайл, который вы, возможно, сможете разобрать:convert difference.png \ -fill black \ +opaque lime \ -colorspace gray \ -threshold 1% pbm:- | potrace - -s -o green.svgЧто дает следующее:
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="2880.000000pt" height="1370.000000pt" viewBox="0 0 2880.000000 1370.000000" preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.12, written by Peter Selinger 2001-2015 </metadata> <g transform="translate(0.000000,1370.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none"> <path d="M20 6875 l0 -6826 25 -24 24 -25 14366 0 14365 0 0 6850 0 6850 -14390 0 -14390 0 0 -6825z m7280 4505 l0 -160 7110 0 7110 0 0 -1180 0 -1180 -7110 0 -7110 0 0 -160 0 -160 4290 0 4290 0 0 -1780 0 -1780 2820 0 2820 0 0 -120 0 -120 -2830 0 -2830 0 0 1450 0 1450 -4270 0 -4270 0 0 -1320 0 -1320 4260 0 4260 0 0 -120 0 -120 -4270 0 -4270 0 0 1810 c0 1200 3 1810 10 1810 6 0 10 -37 10 -90 l0 -90 4270 0 4270 0 0 160 0 160 -4270 0 -4270 0 0 -60 c0 -53 -2 -60 -20 -60 -20 0 -20 7 -20 1570 0 1040 3 1570 10 1570 6 0 10 -60 10 -160z m8240 -4440 l0 -380 -3950 0 -3950 0 0 380 0 380 3950 0 3950 0 0 -380z m-2260 -1160 l0 -460 -1700 0 -1700 0 0 460 0 460 1700 0 1700 0 0 -460z m15505 -5759 c-3 -6 -11 -11 -16 -11 -5 0 -4 6 3 14 14 16 24 13 13 -3z"/> <path d="M7400 10040 l0 -1080 7010 0 7010 0 0 1080 0 1080 -7010 0 -7010 0 0 -1080z"/> <path d="M7420 7920 l0 -180 4170 0 4170 0 0 180 0 180 -4170 0 -4170 0 0 -180z"/> <path d="M7680 6940 l0 -340 3910 0 3910 0 0 340 0 340 -3910 0 -3910 0 0 -340z"/> <path d="M9980 5780 l0 -360 1600 0 1600 0 0 360 0 360 -1600 0 -1600 0 0 -360z"/> </g> </svg>
Comments