|
|
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Вопрос следующий: Имеется бинаризованное изображение, для него необходимо построить линию длины. Линия длины - это линия, проведенная между двумя наиболее удаленными друг от друга точками изображения. Для того, чтобы найти координаты первой точки, я прохожу циклом всю картинку и когда встречаю пиксель черного цвета, то запоминаю его координаты. С этим вроде проблем нет. А вот дальше... По идее самым правильным будет обход контура и сравнивание координат начала изображения со всеми точками контура. И там, где координаты точки контура максимально велики - установить эту точку как конец линии длины. Контур у меня есть. Никак не могу придумать, как можно произвести сравнение координат текущей точки со всеми координатами точек контура и выявить максимальные координаты. Буду рад Вашим советам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 12:23 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Strelok_33Для того, чтобы найти координаты первой точки, я прохожу циклом всю картинку и когда встречаю пиксель черного цвета, то запоминаю его координаты. С этим вроде проблем нет. А разве первая точка может быть внутри изображения? Максимально длинный отрезок наверное же обеими точками на контуре будет. авторКонтур у меня есть. Никак не могу придумать, как можно произвести сравнение координат текущей точки со всеми координатами точек контура В чем собственно проблема? Контур есть - перебери все его точки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 12:49 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Edd.DragonА разве первая точка может быть внутри изображения? Максимально длинный отрезок наверное же обеими точками на контуре будет. Ну к примеру у нас есть на белом фоне некий объект черного цвета. Вот для этого объекта и будем находить линию длины. Естественно мы по двум точкам будем строить отрезок. Edd.DragonВ чем собственно проблема? Контур есть - перебери все его точки. Вот я что-то не могу придумать, каким образом можно все точки контура перебрать. И сравнить потом их координаты с начальной точкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 13:03 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Strelok_33Ну к примеру у нас есть на белом фоне некий объект черного цвета. Вот для этого объекта и будем находить линию длины. Естественно мы по двум точкам будем строить отрезок. Ну так а зачем внутренние то точки перебирать? Нас интересует отрезок максимкальной длины? Такой отрезок обязательно обеими точками ляжет на контур. Любой отрезок проведенный не с контура, а изнутри рисунка не окажется максимально длинным. авторВот я что-то не могу придумать, каким образом можно все точки контура перебрать. Естественно это зависит от того, как у тебя контур хранится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 13:07 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Edd.DragonНу так а зачем внутренние то точки перебирать? Нас интересует отрезок максимкальной длины? Такой отрезок обязательно обеими точками ляжет на контур. Любой отрезок проведенный не с контура, а изнутри рисунка не окажется максимально длинным. Совершенно согласен. Edd.DragonЕстественно это зависит от того, как у тебя контур хранится. Контур планируется хранить в виде матрицы в стрингриде. Не собираюсь утверждать, что это наиболее рациональный способ, но так нагляднее. Фоновый пиксель принимает значение "0", не фоновый - "255". То есть каким-либо образом надо будет обойти все ячейки, которые содержат число 255 и сравнить координаты каждой ячейки с точкой начала обхода контура. Тут же при обходе надо будет учитывать некоторую маску, с помощью которой мы будем обходить контур и проверять, что следующий пиксель является пикселем контура, а не фоновым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 13:21 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
авторФоновый пиксель принимает значение "0", не фоновый - "255" Наоборот надо бы. Черный обычно - 0, а белый - 255. Потом путаница может возникнуть или необходимость менять местами при каких-либо операциях. Но в принципе, без разницы. 1. Я так понимаю изображения мааааленькие, если будете для наглядности их в стринг-гриде выводить (1 пиксель = 1 ячейка)? 2. Стринггрид - это средство вывода, а не средство хранения. Хранить картинку/контур в таком виде надо не в гриде, а в обычном массиве двумерном. Ну а дальше - выводить ее на экран как удобно. Хоть в грид заносить значения из массива, хоть на канве рисовать (один пиксель например квадратом 3х3). Хоть оба способа одновременно. 3. Если контур не хранится в виде одномерного массива точек, а хранится в виде картинки (матрицы), то "черная" точка принадлежит контуру, если хотя бы одна из 8-ми окружающих ее точек - "белая". Поскольку контур нужно пройти не один раз, а для каждой точки контура придется перебирать все остальные точки контура для вычисления длины, то сначала желательно перебрать все точки контура с картинки и поместить их в линейный массив точек. Т.е. массив edge[], каждый элемент которого содержит пару координат точки: x и y. Перебираем всю картинку поточечно, если (i,j)-точка является контурной (рядом с ней есть хотя бы одна фоновая точка) - помещаем ее в edge[]. Вот теперь, работая с edge[], будем искать максимально длинный отрезок. Берем edge[0] в качестве первой точки отрезка, перебираем все остальные edge[i] в качестве второй точки отрезка. Берем edge[1] в качестве первой точки отрезка, перебираем ... И т.д. Максимальное значение этого перебора храним в переменных maxIdx1 (индекс первой точки), maxIdx2 (индекс второй точки), maxLength (длина между этими точками). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 13:37 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Edd.DragonНаоборот надо бы. Черный обычно - 0, а белый - 255. Потом путаница может возникнуть или необходимость менять местами при каких-либо операциях. Но в принципе, без разницы. ну это знаете - как в RGB) 255, 255, 255 - черный, 0, 0, 0 - белый. Edd.DragonЯ так понимаю изображения мааааленькие, если будете для наглядности их в стринг-гриде выводить (1 пиксель = 1 ячейка)? Да, Вы правы - изображения небольшие, это раз. А во-вторых одним из заданий моей работы с графикой является вывод значений пикселов на экран. Т.е. поначалу я беру цветную картинку, бинаризую его и на матрице все это отражается. Т.е. были ячейки 150, 200, 10, 1, а стали 255, 255, 0, 0 (например). Edd.DragonСтринггрид - это средство вывода, а не средство хранения. Хранить картинку/контур в таком виде надо не в гриде, а в обычном массиве двумерном. Да, пожалуй так будет правильнее. Что касается остального - спасибо за советы! Теперь надо подумать над реализацией. P.S. К модераторам просьба пока тему не закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 14:06 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Strelok_33ну это знаете - как в RGB) 255, 255, 255 - черный, 0, 0, 0 - белый. Наоборот Strelok_33Что касается остального - спасибо за советы! Теперь надо подумать над реализацией. Да там никаких сложностей. Циклы, циклы, да вычисление расстояния между двумя точками (i1,j1) - (i2,j2) по теореме Пифагора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 14:29 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Задачу нужно привести к другой постановке. Будем искать поперечник выпуклого многоугольника. Если контур известен, то мы его упрощаем. Точки которые вогнуты убираем из множества. Остаются значимые точки {N} - вершины многугольника. Генерируем сочетания 2 из N вершин и ищем максимально длинное расстояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 18:28 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
mayton1Задачу нужно привести к другой постановке. Будем искать поперечник выпуклого многоугольника. Если контур известен, то мы его упрощаем. Точки которые вогнуты убираем из множества. Остаются значимые точки {N} - вершины многоугольника. Генерируем сочетания 2 из N вершин и ищем максимально длинное расстояние. Т.е. как я понял, Вы предлагаете оставить только вершины грубо говоря от контура? Если фигура сложная - не будут ли они совпадать с участками максимальной кривизны? А вот это место "Генерируем сочетания 2 из N вершин и ищем максимально длинное расстояние." - разъясните пожалуйста поподробнее, если не сложно. Что-то я не понял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 20:37 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Я предлагаю оставить только те вершины, которые влияют на результат. Чтобы не говорить много и красноречиво лучше один раз увидеть. Приложите в форум образец B&W картинки и мы попробуем обозначить эти вершины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 22:04 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Прилагаю образец бинаризованного изображения. Специально выбрал такой пример, после которого остальные уже не будут вызывать вопросов. картинка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 22:32 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Рисовал грубо. На глаз. Но думаю, идея понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 22:49 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
mayton, То есть тут каждая вершина по идее должна сравниваться координатами со всеми остальными, иначе как их можно сравнить и узнать наиболее эффективные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 23:10 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Я-же говорю. Убираем вогнутые вершины. Смотри здесь алгоритм http://algolist.manual.ru/maths/geom/convhull/ Потом делаем то что я, нарисовал интуитивно. Зелёная линия - суть максимальный поперечник (на глазок). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 23:16 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
mayton, Вот за ссылочку Вам отдельное merci Завтра продолжим) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 23:36 |
|
||
|
Построение линии длины изображения
|
|||
|---|---|---|---|
|
#18+
Strelok_33А вот это место "Генерируем сочетания 2 из N вершин и ищем максимально длинное расстояние." - разъясните пожалуйста поподробнее, если не сложно. Что-то я не понял) Это и есть " Берем edge[0] в качестве первой точки отрезка, перебираем все остальные edge[i] в качестве второй точки отрезка. Берем edge[1] в качестве первой точки отрезка, перебираем ... И т.д. " Только теперь у нас в edge[] десяток точек, а не сотни, как ранее. Модератор: Тема перенесена из форума "C++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 10:34 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37173516&tid=1343057]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 485ms |

| 0 / 0 |
