Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.166.7] |
|
Сообщ.
#1
,
|
|
|
Скажите, какие существуют алгоритмы сглаживания контуров объектов полутоновых изображений?
|
Сообщ.
#2
,
|
|
|
hawk1
Выделяем края(3 алгоритма) и сглаживаем блюр (функция которой сглаживаем или частотая фильтрация или вайвлеты). Подробнее можно найти в википедии(в ангийской подробнее). |
Сообщ.
#4
,
|
|
|
Тогда еще вопрос. Изображения с каким количеством объектов использовать для тестирования?
|
Сообщ.
#5
,
|
|
|
В википедии ниче не нашел.
|
Сообщ.
#6
,
|
|
|
Первое что надо сделать это выделить края
http://en.wikipedia.org/wiki/Edge_detection Canny edge detector - наиболее лучшей алгоритм. Sobel operator - самы простой алгоритм. Prewitt operator - почти тоже самое что Sobel. Сглаживание это блюр. Или другими словами размытие. Box Blur - самый простой способ сгладит. Берем соседнии пиксели складываеи и делим на число соседий. Gaussian blur - Гаусовское сглажевание. Тоже самое но с весовыми коэфицентами по гаусовской функции. http://en.wikipedia.org/wiki/Gaussian_blur Media - медиана это фильтрация. Но не сглаживает. http://en.wikipedia.org/wiki/Category:Image_processing Также есть отфильтровать высокии частоты, то все изоброжение сгладиться. К таким фильторам относятся Blur. Но он впространственной облости работает. А можно перейти в частотную используя фурье преобразование. В вайвлетах, есть аналоги разделения на низкии и высокии частоты. Таковот выделем контуры одним из методов, получаем темм самым маску. Фильтруем изоброжение. Применяем масску чтобы смешать новое изоброжение и старое. |
Сообщ.
#7
,
|
|
|
Еще бы ссылки на материал на русском языке.
|
Сообщ.
#8
,
|
|
|
есть ещё фрактальная интерполяция - по сути то что называется словом рендеринг (rendering)
фрактальные адаптивные методы интегрирования - смотря что за изображение и что сглаживаем. но это занимает много ресурсов процессора попросту говоря. чем мягче и красивее картинка - тем больше ресурсов. по сути эти всё фильтры - зачастую довольно простые операции с соседними точками изображения. |
Сообщ.
#9
,
|
|
|
А как быть если контур разомкнутый, т.е. линия? Как его выделить? Т.е. понятно, что надо найти первую точку и дальше анализировать ее окрестность. Как это хоть на псевдокоде выглядит?
|
Сообщ.
#10
,
|
|
|
Плиз дайте ссылки на описание задачи сглаживания зашумленных контуров.
|
Сообщ.
#11
,
|
|
|
hawk1
Ну ты блин даешь. Я успел за это время целую библеотеку написать оптимизировать и отладить. Result:=TByteMap.Create(bm.Canals); Result.Width:=bm.Width; Result.Height:=bm.Height; p:=Result.ScanLine[1]; p1:=bm.ScanLine[0]; p2:=bm.ScanLine[1]; p3:=bm.ScanLine[2]; LL:=bm.LineLen; //Длина в байтах между линиями uf:=bm.Canals; LL1:=uf*bm.Width-uf; for j:=1 to bm.Height-2 do begin i:=uf; while i<LL1 do begin //Собель c:=SQRT_Table[(sqr((p1[i-uf]-p1[i+uf])+ // SQRT_Table таблица корней для ускорения рассчета корня 2*(p2[i-uf]-p2[i+uf])+ //По строкам (p3[i-uf]-p3[i+uf])) + sqr((p1[i-uf]-p3[i-uf])+ // По столбцам 2*(p1[i]-p3[i])+ (p1[i+uf]-p3[i+uf])) +1)shr 5];//+1 для уточнения рассчетов if c>T then // T порог begin //Точка принадлежит контуру p[i]:=(1*p1[i-uf]+2*p1[i-uf]+1*p1[i-uf]+ 2*p2[i-uf]+4*p2[i-uf]+2*p2[i-uf]+ //Blur - сглаживание 1*p3[i-uf]+2*p3[i-uf]+1*p3[i-uf]) shr 4; end else begin p[i]:=p2[i]; // Не контур оставляем как есть. end; inc(i); end; inc(p,LL); inc(p1,LL); inc(p2,LL); inc(p3,LL); end; Добавлено Цитата hawk1 @ Плиз дайте ссылки на описание задачи сглаживания зашумленных контуров. Это у тебя надо спрашивать, что ты хочешь. Или кто ее тебе дал это задание. Потому что под это определение попадает две задачи. Первая убрать шум с изоброжения там где контуры. Вторая убрать шум с формы контура. Это две разные задачи. Если ответ на первую постом выше. То вторая требудет знать параметры контура. Провести векторизация и после уже сглаживат. |
Сообщ.
#12
,
|
|
|
Вторая. Интересует сама проблематика.
|
Сообщ.
#13
,
|
|
|
hawk1
1 задача от 2 не сильно отличается методы применяются все тежи самые. Лучше чтобы контуры были заданы, а не искать их на изоброжении. Но тут надо смотреть в сторону векторизации. Есть волновой алгоритм скелетизации(на русском в гугле найдешь). Его реализуешь, а дальше уже можно сглаживать. Тотже блюр или скользящее среднее или Гаусовское сглаживание или частотная фильтрация. Также можно использовать сплайны и прочее прочее прочее. А ссылки надо искать. На английском можно найти. Я правда с такой постановкой задачи не встричался. Хотя, вроде вспомнил есть старая книжка на русском там что-то было на похожую тему распознование образов востановление контуров что-то в этом духе. Для востановления разрывов можно использовать мат. морфологию. Просто искать пиксели в заданной окресности и соединять. |