1

Цель: найти белый участок с самой большой площадью. И если это возможно, подтвердите, если это круг. Затем найдите средний центр этого патча и радиуса.Сегментация изображений и распознавание изображений. Как распознать координаты белого патча в черном фоне?

Я думал о создании края вокруг изображений, но я не знаю, как это поможет в определении области патчей.

Я пытаюсь это сделать, и если кто-нибудь может вести меня в правильном направлении, я был бы очень признателен.

В настоящее время я использую библиотеку php.gd, и это единственный инструмент, который у меня есть.

Благодаря

+0

У меня нет опыта работы с PHP, но определение области очень просто. Все, что вам нужно сделать, - подсчитать количество белых пикселей для каждого объекта. Теперь, чтобы определить, является ли объект с наибольшей площадью кругом или нет, вы можете использовать формулу здесь из этого сообщения: http://stackoverflow.com/questions/24802059/removing-square-objects - Формула утверждает, что объект, который является круглым, имеет отношение, близкое к 1, тогда как некруглые объекты имеют отношение, которое намного ниже. Вы можете установить порог, чтобы определить, является ли форма круговой или нет. – rayryeng

+0

@rayryeng благодарю вас за ваше решение. Как вы вычисляете площадь каждого объекта отдельно? Подсчет белых пикселей даст кумулятивную область для всех объектов. – Vish

+0

Я не сказал, чтобы вычислить площадь ** всех ** объектов вместе - вы вычисляете площадь каждого объекта отдельно. php.gd имеет очень простой способ манипулирования изображениями. Что вам нужно сделать, это выполнить привязку подключенных компонентов - http://homepages.inf.ed.ac.uk/rbf/HIPR2/label.htm - Это дает уникальную метку для каждого уникального объекта. Оттуда вы можете просмотреть все уникальные ярлыки и найти их общие области. У меня нет знаний в PHP, поэтому я не знаю никаких библиотек, которые вы могли бы сделать с помощью ....но, надеюсь, вы можете найти что-то, что связано с подключенными компонентами и php.gd. – rayryeng

ответ

2

Обнаружение края в изображениях, на самом деле довольно просто. Наиболее стандартным способом является использование операции image convolution и выбор правильного ядра для перемещения по вашему изображению. В php.gd есть функция, которая называется imageconvolution, где вы можете указать входное изображение, ядро ​​свертки, делитель и смещение. Этот делитель просто делит все значения в ядре на это значение, а смещение добавляет значение к каждому значению в ядре. Таким образом, при условии, что ваше изображение загружается в массив $im, вы могли бы сделать это:

$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1); 
$divisor = 0; 
$offset = 0; 

imageconvolution($im, $edgeMatrix, $divisor, $offset); 

Обратите внимание, что imageconvolution мутирует оригинальное входное изображение, так $im будет содержать край обнаружен результат. Убедитесь, что у вас есть копия исходного изображения где-нибудь в случае необходимости.

$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1); является стандартом Laplacian convolution matrix и используется довольно часто для задач обнаружения кромок.

Однако есть функция под названием imagefilter, где есть флаг обнаружения края - IMG_FILTER_EDGEDETECT. Эта функция фильтрует изображение с одним из нескольких параметров, и обнаружение края является одним из этих параметров. Таким образом, вы могли бы сделать это:

imagefilter($im, IMG_FILTER_EDGEDETECT); 

Как imageconvolution, imagefilter также мутирует входное изображение, поэтому снова убедитесь, что вы держите исходное изображение где-то, если вам это нужно.

Надеюсь, один из них будет работать на вас!