Я использовал, чтобы сделать этот вид анализа на микрофотографиях и в конечном итоге положить все, что нужно в обработке изображений и пакет анализа, написанный на C, управляемый через Tcl. (Он работал только с 512 x 512 изображениями, что объясняет, почему 512 так часто появляются. Имеются изображения с выделенными пикселями разных размеров, но большая часть работы была выполнена с 8-битными пикселями, что объясняет, почему существует 0xff и максимальное значение 254 на изображении.)
Вкратце, «zz» в начале команд Tcl отправляет оставшуюся часть строки в парсер пакета, который вызывает соответствующую процедуру C с данными аргументами. Сразу после «zz» - это аргумент, указывающий ввод и вывод команды. (Там может быть несколько входов, но только один вывод.) «R» означает 512 x 512 x 8-битное изображение. Третье слово - это имя вызываемой команды; «Графы» маркируют изображение, как описано в тексте ниже. Итак, «zz rr graphs» означает «Вызвать парсер ZZ; введите r-образ в команду graphs и верните r-образ. ' Остальная часть командной строки Tcl указывает, какой из предварительно выделенных изображений использовать. (Изображение «g» является ROI, то есть областью интереса, изображением, почти все ZZ ops выполняются под контролем ROI.) Итак, «r1 r1 g8» означает «Использовать r1 в качестве входных данных, используйте r1 в качестве вывода (то есть маркировать входное изображение) и выполнять операцию, где соответствующий пиксель на изображении g8 --- то есть r8, используемый как ROI ---, равен> 0.
Я не думаю, что он доступен в Интернете в любом месте, но если вы хотите выбрать исходный код или даже скомпилировать весь shebang, я буду рад отправить его вам. Вот выдержка из руководства (но я думаю, что я вижу некоторые ошибки в руководстве в этот поздний срок --- это неловко ...):
Пример 6. Функции подсчета.
Проблема
Counting является общей задачей. Рассчитываемые предметы называются «функциями», и обычно необходимо тщательно готовить изображения, чтобы функции соответствовали друг другу с вещами, которые являются реальными объектами, которые нужно учитывать. Здесь, однако, мы игнорируем подготовку изображения и рассматриваем вместо этого механику подсчета.Первое упражнение по подсчету состоит в том, чтобы узнать, сколько функций находится на изображениях в каталоге ./cells?
подход
Во-первых, давайте определим «особенность». Особенностью является наибольшая группа «установленных» (ненулевых) пикселей, все из которых могут быть достигнуты путем перехода от одного набора пикселов к другому вдоль маршрутов с севера на юго-восток-запад (вверх-вниз-право-слева), начиная от заданного пикселя набора. Команда zz, которая обнаруживает и маркирует такие объекты на изображении, представляет собой «zz rr-графики R: src R: dest G: ROI», так называемый, потому что математический термин для такой функции является «графиком». Если все пиксели на изображении установлены, то на изображении есть только один граф, но он содержит 262144 пикселей (512 * 512). Если пиксели установлены и очищены (равны нулю) в шаблоне шахматной доски, , тогда будут графики 131072 (512 * 512/2), но каждый будет содержать только один пиксель. Вкратце объясняется, что «zz rr graphs» начинается в верхнем левом углу изображения и сканирует каждую последующую строку слева направо, пока не найдет заданный пиксель, а затем найдет все установленные пиксели, прикрепленные к этому через север, юг, восток , или западные границы («4-подключенные»). Затем он устанавливает все пиксели в этом графе равными 1 (0x01). После нахождения и маркировки графика 1 он снова начинает сканирование в пикселе после того, где он впервые открыл график 1, на этот раз игнорируя любые пиксели, которые уже принадлежат графику. Первые 254 найденных графа будут отмечены однозначно; все найденные после этого графики будут отмечены значением 255 (0xff) и поэтому не могут отличаться друг от друга. Ключом к тому, чтобы точно подсчитывать любое количество графиков, является обработка каждого изображения поэтапно, то есть поиск количества графиков на изображении и, если число больше 254, стереть только 254 найденных графика, повторяя до тех пор, пока не будет найдено 254 или меньше графов. Язык Tcl предоставляет средства для настройки управления этой операцией.
Давайте начнем создавать команды, необходимые для чтения файла изображения ZZ в R-образ, и обнаружения и маркировки графиков. Перед циклом обработки мы объявляем и обнуляем переменную, чтобы удерживать общее количество функций в серии изображений. Внутри цикла обработки мы начинаем с чтения файла изображения в R-изображение и обнаружения и маркировки графиков.
zz ur to $inDir/$img r1
zz rr graphs r1 r1 g8
Далее мы обнулить некоторые переменные, чтобы следить за подсчеты, а затем использовать команду «ра макс», чтобы выяснить, были ли обнаружены более 254 графиков.
set nGraphs [ zz ra max r1 a1 g1 ]
Если nGraphs делает равное 255, то 254 точно подсчитаны графики должны быть добавлены к общей сумме, графики от 1 до 254, должны быть удалены, и число повторяется столько раз, сколько потребуется, чтобы уменьшить количество графиков ниже 255.
while {$nGraphs == 255} {
incr sumGraphs 254
zz rbr lt r1 155 r1 g1 0 255
set sumGraphs 0
zz rr graphs r1 r1 g8
set nGraphs [ zz ra max r1 a1 g8 ]
}
Когда «а» цикл завершается, переменная nGraphs должна иметь несколько меньше, чем 255, то есть, ряд точно подсчитанные график; это добавляется к увеличению общего количества функций в серии изображений.
incr sumGraphs $nGraphs
После цикла обработки распечатайте общее количество функций, найденных в этой серии.
puts “Total number of features in $inDir \
images $beginImg through $endImg is $sumGraphs.”
После цикла обработки распечатайте общее количество функций, найденных в этой серии.
Простые распознавания объектов звучат как противоречие в терминах для меня. – Joren
Что бы вы предложили в качестве альтернативы? –
Пожалуйста, не говорите «разрешено» в вашем вопросе. Либо принимайте лучший ответ, либо отвечайте на свой вопрос и принимайте это. – Soviut