Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Автоматическое выделение характерных объектов на изображении
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
newleshii
Есть картинка (самая верхняя). Задача выделить на ней объекты в соответствии с красными линиями (как показано на нижней картинке).
Какие идеи могут быть о подходе решения данной задачи?


Нажмите для просмотра прикрепленного файла
GetSmart
А что на картинке? Там всегда "объекты" будут выдляться строго вертикальными линиями? Тогда имхо все горизонтальные строки картинки нужно уложить (сложить) в одну, таким образом повысится сигнал/шум и после этого можно поднять контраст. А потом останутся сущие пустяки, типа "если точка больше порога, то 1, иначе 0".
mdmitry
Matlab+Image processing Tool Box.
Можно при желании задать объект и подсчитать количество объектов на изображении. (Была такая задача очень давно)
Methane
Цитата(mdmitry @ Nov 19 2009, 23:54) *
Matlab+Image processing Tool Box.
Можно при желании задать объект и подсчитать количество объектов на изображении. (Была такая задача очень давно)

Я бы даже не с матлаба, а вообще с гимпа начал. Поигрался бы контрастностью итд.

Цитата(mdmitry @ Nov 19 2009, 23:54) *
Matlab+Image processing Tool Box.
Можно при желании задать объект и подсчитать количество объектов на изображении. (Была такая задача очень давно)

ИМХО очевидно что можно просто считать среднее для каждого Х. Ну а что дальше делать, моей телепатии не хватает.
newleshii
Цитата
Там всегда "объекты" будут выдляться строго вертикальными линиями?


Да

Цитата
Тогда имхо все горизонтальные строки картинки нужно уложить (сложить) в одну, таким образом повысится сигнал/шум


Там изначально разница между полезной составляющей и шумовой обычно очень маленькая, поэтому при суммировании икса по игрик шумовая составляющая также нехило возрастет.

Цитата
А потом останутся сущие пустяки, типа "если точка больше порога, то 1, иначе 0".


Ну к одномерной задаче я вроде бы пытался приводить, но после перехода к одномерному варианту, близко расположенные вертикальные пучности оказываются слипшимися, да и просто не особо то над шумами и выделялись. Т.е. когда смотришь на картину в целом, то глазками вроде все видно хорошо, а как переходишь в ономерный вариант (я тоже просто суммировал), то там адекватно рапссчитать порог не всегда получается.

Цитата
Можно при желании задать объект и подсчитать количество объектов на изображении.

Объект не задашь, так как заранее не знаешь какой он ширины (да и не всегда полезные составляющие по вертикали непрерывны, иногда там в некоторых получается прерывистая полоса).

Цитата
а вообще с гимпа начал

А гимп это что за зверь?


Цитата
ИМХО очевидно что можно просто считать среднее для каждого Х

С учетом возможной прерывисти и слабости полезных линий, ни среднее, не медиана, ни суммирование (т.е. переход к одномерному представлению) уверенного выделения не дают.

Единственно что я из предложеннго не пробовал, так это повышение контрасности, но боюсь, что в данном примере это можь и поможет, так как уровни примерно одни и теже и растянуть максимум и минимум представляется возможным, но часто бывает так, что полоски имеют большой перепад по уровню, очень близко друг к другу расположены, и имеют прерывистый характер, так что боюсь, что в общем случае контрасность не всегда будет полезной.
SFx
Цитата(newleshii @ Nov 20 2009, 08:50) *
А гимп это что за зверь?

http://ru.wikipedia.org/wiki/GIMP
Rst7
Цитата
Там изначально разница между полезной составляющей и шумовой обычно очень маленькая, поэтому при суммировании икса по игрик шумовая составляющая также нехило возрастет.


Фигня какая-то. У Вас почти 400 пикселей по вертикали. Банальное суммирование всех строк даст улучшение соотношения сигнал/шум в sqrt(400)=20 раз. Этого должно быть достаточно. Посмотрите, что-то Вы не так сделали.
newleshii
Цитата(Rst7 @ Nov 20 2009, 09:25) *
Фигня какая-то. У Вас почти 400 пикселей по вертикали. Банальное суммирование всех строк даст улучшение соотношения сигнал/шум в sqrt(400)=20 раз. Этого должно быть достаточно. Посмотрите, что-то Вы не так сделали.


Если полезная полоса непррерывна и хорошенько отдельно стоит, то так и получается, но если она на картинке по вертикали не ненпрерывна, а занимает всего лишь часть, т.е. является отрезком длиной, например, 10% от 400 пикселей, то таким улучшением там и не пахнет.
Methane
Цитата(Rst7 @ Nov 20 2009, 08:25) *
Фигня какая-то. У Вас почти 400 пикселей по вертикали. Банальное суммирование всех строк даст улучшение соотношения сигнал/шум в sqrt(400)=20 раз. Этого должно быть достаточно. Посмотрите, что-то Вы не так сделали.

Угу. Потом можно искать перегиб.

Цитата(newleshii @ Nov 20 2009, 08:44) *
Если полезная полоса непррерывна и хорошенько отдельно стоит, то так и получается, но если она на картинке по вертикали не ненпрерывна, а занимает всего лишь часть, т.е. является отрезком длиной, например, 10% от 400 пикселей, то таким улучшением там и не пахнет.

Вынужден Вас огорчить, все телепаты с форума померли от гриппа. smile.gif
Rst7
Цитата
а занимает всего лишь часть, т.е. является отрезком длиной, например, 10% от 400 пикселей, то таким улучшением там и не пахнет.


Пример такой картинки в студию.

Цитата
Угу. Потом можно искать перегиб.


Так, немного потелепатирую, но мне кажется, что надо будет просто убрать постоянную составляющую и затем искать пересечения с 0.
Methane
Цитата(Rst7 @ Nov 20 2009, 08:52) *
Так, немного потелепатирую, но мне кажется, что надо будет просто убрать постоянную составляющую и затем искать пересечения с 0.

ХЕЗ. Может быть.
fontp
Цитата(Rst7 @ Nov 20 2009, 09:52) *
Так, немного потелепатирую, но мне кажется, что надо будет просто убрать постоянную составляющую и затем искать пересечения с 0.


Это по х нужно убрать постоянную соотавляющую, а по y наоборот нужно оставить только самые низкочастотные компоненты спектра

Цитата(Rst7 @ Nov 20 2009, 09:52) *
Пример такой картинки в студию.


Пример приведен выше - картинка шумоподобна, но дитерингом просматривается полосатость. Вот и раcфокусировать её по Y, а по Х можно повысить даже резкость
Rst7
Цитата
Это по х нужно убрать постоянную соотавляющую, а по y наоборот нужно оставить только самые низкочастотные компоненты спектра


Сначала надо y-координату убрать вообще. Получить одномерный массив. Это и есть взятие самой низкочастотной составляющей по y. Что собственно говоря предложили сразу. Вы немного опоздали к началу wink.gif

Цитата
Пример приведен выше - картинка шумоподобна, но дитерингом просматривается полосатость. Вот и раcфокусировать её по Y


Не согласен. На приведенной картинке полосы на всю высоту. А топикстартер говорит про, например, полосу, которая
Цитата
по вертикали не ненпрерывна, а занимает всего лишь часть, т.е. является отрезком длиной, например, 10% от 400 пикселей,
fontp
Цитата(Rst7 @ Nov 20 2009, 10:42) *
Сначала надо y-координату убрать вообще. Получить одномерный массив. Это и есть взятие самой низкочастотной составляющей по y. Что собственно говоря предложили сразу. Вы немного опоздали к началу wink.gif
Не согласен. На приведенной картинке полосы на всю высоту. А топикстартер говорит про, например, полосу, которая


Там яркость не непрерывна, а модулирована плотностью белых шумоподобных точек.
Поднесите монитор поближе к глазам biggrin.gif
и увидите там конфетти

Вообще убрать y-координату совсем можно только тогда, если есть основания считать, что полосы строго вертикальны.
А если они немного наклонны?

С тем что по Y нужно убирать высокие частоты в любом случае я согласен
blackfin
Цитата(Rst7 @ Nov 20 2009, 10:42) *
Сначала надо y-координату убрать вообще. Получить одномерный массив. Это и есть взятие самой низкочастотной составляющей по y. Что собственно говоря предложили сразу.

А по x сделать потом согласованную фильтрацию. Но для этого нужно знать ЧТО мы ищем.

А об этом пока молчат.. wink.gif
fontp
Цитата(blackfin @ Nov 20 2009, 10:50) *
А по x сделать потом согласованную фильтрацию. Но для этого нужно знать ЧТО мы ищем.
А об этом пока молчат.. wink.gif


Ищем мы видимо контуры.
Но это скрываем rolleyes.gif

Во всяком случае красные маркеры позиционированы на контурах
Rst7
Цитата
Там яркость не непрерывна, а модулирована плотностью белых шумоподобных точек.


Вы не поверите, но в связи с квантовой природой света любое изображение - шумоподобно. Просто усредняется здорово wink.gif

Цитата
Вообще убрать y-координату можно только тогда, если есть основания считать, что полосы строго вертикальны.
А если они немного наклонны?


Мои телепатические способности подсказывают мне, что полосы строго вертикальны. Походу это данные с фотоприемной линейки, а вот что на нее проецируется - это я уже хз.

Цитата
А по x сделать потом согласованную фильтрацию. Но для этого нужно знать ЧТО мы ищем.


Именно. Ждем уточнений.
blackfin
Цитата(Rst7 @ Nov 20 2009, 10:57) *
Мои телепатические способности подсказывают мне, что полосы строго вертикальны. Походу это данные с фотоприемной линейки, а вот что на нее проецируется - это я уже хз.

Дык, "походу" нашли исполнителя по измерению стволовых заготовок.. biggrin.gif
Rst7
Цитата
Дык, "походу" нашли исполнителя по измерению стволовых заготовок..


Тогда имеет смысл поставить лампочку посильнее. А то соотношение с/ш маловато.
Methane
Цитата(Rst7 @ Nov 20 2009, 10:22) *
Тогда имеет смысл поставить лампочку посильнее. А то соотношение с/ш маловато.

+1. Лампочку сильнее и вообще CCD от сканера + объектив от фотоаппарата. Должно сильно лучше получится.
mdmitry
Для обработки изображений достаточно часто используется вэйвлет анализ, в частности, для борьбы с зашумленностью.
DRUID3
Цитата(mdmitry @ Nov 20 2009, 10:50) *
Для обработки изображений достаточно часто используется вэйвлет анализ, в частности, для борьбы с зашумленностью.

biggrin.gif Оно то конечно так... Но судя по конкретной задаче "стартера" боюсь, что может хватить аппроксимации дифференциатора по x-у и компаратора-счетчика... biggrin.gif
newleshii
Ранее приведенная картинка является в общем то самым лучшим вариантом, но очень часто получается что-то типа такого, когда вертикальные линии рваные, размытые и очень тесно соприкасаются.




Нажмите для просмотра прикрепленного файла
fontp
Цитата(newleshii @ Nov 20 2009, 12:38) *
Ранее приведенная картинка является в общем то самым лучшим вариантом, но очень часто получается что-то типа такого, когда вертикальные линии рваные, размытые и очень тесно соприкасаются.


Ну так и сложите все строки по y чтобы не были рваными и не соприкасались. Что Вам мешает?
Если картинка цветная - сложите покомпонентно.
Со строкой получившейся уже разбирайтесь.
GetSmart
Цитата(newleshii @ Nov 20 2009, 15:38) *
Ранее приведенная картинка является в общем то самым лучшим вариантом, но очень часто получается что-то типа такого, когда вертикальные линии рваные, размытые и очень тесно соприкасаются.

Картинка - жуть biggrin.gif
Тут даже глазом (а глаз + моск = мощнейший анализатор картинок smile.gif) мало что можно идентифицировать. Особенно границы. И судя по 7 и 10 зоне суммирование строк может только ухудшить их идентификацию. Всё-таки алгоритм должен работать с индивидуальными строками, а потом эти N результатов как-то объединять по функции OR, но не сложением. С другой стороны, 1 и 2 зоны в некоторых строках вообще сливаются в одну, но результат должен чётко идентифицировать раздел между ними. Тяжёлый случай smile.gif
AndrewN
Цитата(newleshii @ Nov 20 2009, 12:38) *
Ранее приведенная картинка является в общем то самым лучшим вариантом, но очень часто получается что-то типа такого, когда вертикальные линии рваные, размытые и очень тесно соприкасаются.

Можно попробовать. Но нужно несколько картинок с разными данными (10 - 20) - лучше всего в формате pgm (двоичном).
newleshii
Цитата(AndrewN @ Nov 20 2009, 16:38) *
Можно попробовать. Но нужно несколько картинок с разными данными (10 - 20) - лучше всего в формате pgm (двоичном).



Все что пока оперативно можно предложить (т.е. итого три штук)

Нажмите для просмотра прикрепленного файла
GetSmart
Цитата(newleshii @ Nov 20 2009, 20:16) *
Все что пока оперативно можно предложить (т.е. итого три штук)

В данный момент (на представленных картинках) кто и как определил границы объектов?
Methane
Цитата(GetSmart @ Nov 20 2009, 16:26) *
В данный момент (на представленных картинках) кто и как определил границы объектов?

Я уже писал. Просто усреднить сверху вниз. Может быть предварительно пропустив через какой-то цветной фильтр.
fontp
Цитата(Methane @ Nov 20 2009, 17:38) *
Я уже писал. Просто усреднить сверху вниз. Может быть предварительно пропустив через какой-то цветной фильтр.


Раз полосы вертикальны то очевидно что-то нужно накоплять по столбцам.
Может быть сначала выделить текстурные признаки, если играет роль не только цвет, но и текстура (например размер неоднородностей). На последнем снимке должно расслоиться по цвету, на предыдущем зоны 7 и 10 навряд ли, сложный вопрос. От порога чувствительности будет зависить сколько зон - то ли 10, то ли 15

Для зоны 10 хорошо заметно, что её свойства не проявляются большинством пикселей, её свойства определяются меньшинством, маргинальны, а значит ни среднее, ни медиана не являются хорошим признаком. Нужно вырабатывать какой-то признак учитывающий отклонения от среднего.
Может энтропия? S*log(S) по каждому цвету. Максимум энтропии широко используется при сегментации текстур
AndrewN
Цитата(newleshii @ Nov 20 2009, 17:16) *
Все что пока оперативно можно предложить (т.е. итого три штук)

Спасибо, конечно :) Но оперативно не надо - мне же програмку нужно еще модифицировать, а это несколько дней займёт, по состоянию остальной работы...

Идеально, исходные данные хочется иметь в черно-белой шкале, чем больше bpp тем лучше, и в pgm формате. Хуже - 8 битовый bmp, но это тоже пойдёт. В файле только данные, которые нужно непосредственно обрабатывать. Все чёрточки, обозначающие границы лучше в отдельном jpege, там же и цвета можно оставить, хотя цвет совершенно не нужен. Мне самому не хочется преобразовывать цвет, чтобы не терять биты.

Потом можно настроить ftp, чтобы туда положить файлы.
Methane
Цитата(fontp @ Nov 20 2009, 16:47) *
Раз полосы вертикальны то очевидно что-то нужно накоплять по столбцам.
Может быть сначала выделить текстурные признаки, если играет роль не только цвет, но и текстура (например размер неоднородностей). На последнем снимке должно расслоиться по цвету, на предыдущем зоны 7 и 10 навряд ли

Я не знаю что нужно.
DRUID3
Цитата(GetSmart @ Nov 20 2009, 16:26) *
В данный момент (на представленных картинках) кто и как определил границы объектов?

мысленно... пробегаем дифференциатором по каждой пиксельной строчке. Далее по стробцу суммируем то, что дал нам дифференциатор. Там где "больше всего дал" - там и момент прихода(или смены или как там оно называется). Цвет... Я думал яркость так "зашифрована" - это "а-ля" амплитуда...
GetSmart
Господа-товарищи biggrin.gif
Я автору вопрос задавал, а не вам. Я его спросил - кто и каким методом (и по каким правилам) нарисовал границы объектов на предосталенных им рисунках.
mdmitry
Может, имеет смысл изображение перевести в черно-белое, а далее обрабатывать.
Похожи картинки на треки: по вертикали время, по горизонтали что-то (канал и т.д.), цвет - интенсивность (амплитуда) явления.
newleshii
Цитата(GetSmart @ Nov 20 2009, 20:49) *
Господа-товарищи biggrin.gif
Я автору вопрос задавал, а не вам. Я его спросил - кто и каким методом (и по каким правилам) нарисовал границы объектов на предосталенных им рисунках.



Границы рисовались глазками (в том числе с учетом априорной информации о том, где на самом деле должны быть выделенные полоски)
GetSmart
Цитата(newleshii @ Nov 20 2009, 23:59) *
Границы рисовались глазками (в том числе с учетом априорной информации о том, где на самом деле должны быть выделенные полоски)

На последней картинке в зоне 4 нах-ся объект буквально в двух строках, причём он начинается с зоны 4 и кончается в зоне 6 имея примерно одинаковую яркость. Это что значит? Он всё равно должен быть разделён на несколько кусков только из-за других границ зон на остальных строках? Может проясните откуда сигнал?
newleshii
Цитата(GetSmart @ Nov 20 2009, 21:25) *
На последней картинке в зоне 4 нах-ся объект буквально в двух строках, причём он начинается с зоны 4 и кончается в зоне 6 имея примерно одинаковую яркость. Это что значит? Он всё равно должен быть разделён на несколько кусков только из-за других границ зон на остальных строках? Может проясните откуда сигнал?


В 4ой зоне штрих на самом деле короткий, но он не доходит до 6ой зоны (хотя немного цепляет 5ую).

Подробности сигнала не знаю (далеко от железной тематики нахожусь), но это как-то мудренно сканирование поверхности после последовательного воздействия на нее другой поверхности (инструмента). Представленные картинки и выделенные полоски - результат натурного эксперемента, когда известно где (по оси Х) и как (непрерывно, импулсьно, сильно, слабо) осуществлялось взаимодействие поверхностей.
Xenia
Сложить интенсивнсти по столбцам - получим одномерную функцию (изображена внизу рисунка красным цветом), а затем на этой функции находятся экстремумы (локальные максимумы и минимумы) и по этим точкам рисунок разрезается на полосы. При нахождении экстремумов может понадобиться сглаживание.
Methane
Цитата(Xenia @ Nov 20 2009, 23:17) *
Сложить интенсивнсти по столбцам - получим одномерную функцию (изображена внизу рисунка красным цветом), а затем на этой функции находятся экстремумы (локальные максимумы и минимумы) и по этим точкам рисунок разрезается на полосы. При нахождении экстремумов может понадобиться сглаживание.

http://ru.wikipedia.org/wiki/%D0%A2%D0%BE%...%86%D0%B8%D0%B8

http://en.wikipedia.org/wiki/Inflection_point
AndrewN
Цитата(Xenia @ Nov 21 2009, 01:17) *
При нахождении экстремумов может понадобиться сглаживание.

Попробовал. Вот что получилось по картинке # 1:
Код
------------------------
PARAM set  1           2
------------------------
EDGE AT  222         222
EDGE AT  245  --     245 не поддалась
EDGE AT  266         266
EDGE AT  294         294
EDGE AT  304         304
EDGE AT  338         337
EDGE AT  576         575
EDGE AT  605         604
EDGE AT  614         615
EDGE AT  644         644
EDGE AT  781         782
EDGE AT  889         888
EDGE AT  917         917
EDGE AT  950         950
EDGE AT  993  --
EDGE AT 1004        1004
------------------------

Обнаруживаются ложные границы в точках 245 и 993, остальные границы
смещены на 2-5 пикселов от координат в jpege.

Шум сильный, очень сильный. Если параметр отсева чуть пошевелить, то
ложные границы плодятся как кролики. Шум давится два раза - после
суммирования строк скользящим средним и перед первой разностью
гауссом, в итоге данные гладенькие на вид, но ложные границы все
равно есть.

Две последние картинки обрабатывать не пытался, они очень компрессией
зашумлены, в дополнение к шуму измерения.
DRUID3
Цитата(AndrewN @ Nov 26 2009, 17:30) *
Обнаруживаются ложные границы в точках 245 и 993, остальные границы
смещены на 2-5 пикселов от координат в jpege.

эээ...кхм... как бы это сказать... а есть сведения на счет реальных границ? 07.gif
314
Скажите, а идентификация методом наибольшего правдоподобия не может спасти отца русской демократии? Или какие-то ещё стохастические методы?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.