Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Дисторсия


Автор: newbie2009 9.3.2012, 00:42
Здравствуйте.

Не могли бы вы мне показать, где прочитать или рассказать алгоритм по к-му делается дисторсию ( http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D1%82%D0%BE%D1%80%D1%81%D0%B8%D1%8F ).
Вот такой эффект как на картинке...

К сожалению поискав в гугле я нечего не смог найти, может вы сможете мне помочь.

Спасибо.

Автор: Фантом 9.3.2012, 02:07
Цитата(newbie2009 @  9.3.2012,  01:42 Найти цитируемый пост)
Не могли бы вы мне показать, где прочитать или рассказать алгоритм по к-му делается дисторсию ( http://ru.wikipedia.org/wiki/%D0%94%D0%B8%...%81%D0%B8%D1%8F ).
Вот такой эффект как на картинке...

Внимательно прочитайте статью Википедии, на которую дали ссылку.  smile Искомый алгоритм (а точнее, преобразование) там описан (раздел "Теория", выражение для дисторсии третьего порядка).

Автор: newbie2009 9.3.2012, 10:05
Цитата(Фантом @ 9.3.2012,  02:07)
Цитата(newbie2009 @  9.3.2012,  01:42 Найти цитируемый пост)
Не могли бы вы мне показать, где прочитать или рассказать алгоритм по к-му делается дисторсию ( http://ru.wikipedia.org/wiki/%D0%94%D0%B8%...%81%D0%B8%D1%8F ).
Вот такой эффект как на картинке...

Внимательно прочитайте статью Википедии, на которую дали ссылку.  smile Искомый алгоритм (а точнее, преобразование) там описан (раздел "Теория", выражение для дисторсии третьего порядка).

хорошо, а можете пояснить тогда как считать дисторсию третьего порядка? и правильно ли я понимаю, что коэффициент b0 - это экспериментально подобранный?

Автор: Фантом 9.3.2012, 12:08
Цитата(newbie2009 @  9.3.2012,  11:05 Найти цитируемый пост)

хорошо, а можете пояснить тогда как считать дисторсию третьего порядка?

Так что же там еще можно объяснить? 

Цитата(newbie2009 @  9.3.2012,  11:05 Найти цитируемый пост)
и правильно ли я понимаю, что коэффициент b0 - это экспериментально подобранный? 

Хм... простите, но Вы прочитали этот раздел статьи? Там русским по белому написано, что b0 - коэффициент линейного увеличения. В простейшем случае, если изображение требуется только исказить, он равен единице. Искажение определяется величиной F3 (которую для получения определенного результата действительно можно подобрать экспериментально).

Автор: Pavia 9.3.2012, 14:00
Фантом
На wiki очень плохо описаны эти коэффициенты.
newbie2009
Б. Яне Цифровая обработка изображений.
Там по лучше описано. Но всё же я так толком с этим искажением и не разобрался какой коэффициент что означает, тем более в разных статьях разные обозначения и разные формулы.


Автор: Фантом 9.3.2012, 15:56
Цитата(Pavia @  9.3.2012,  15:00 Найти цитируемый пост)

На wiki очень плохо описаны эти коэффициенты.

Плохо?!  smile 

По-моему, понятней некуда.
Код

#include<stdio.h>

const float F=0.001;
const float h=0.05;

int main()
{
    FILE *clear,*dist;
    clear=fopen("clear.dat","w+");
    dist=fopen("dist.dat","w+");    

    for(float x=-10.0;x<11.0;x+=1.0) for(float y=-10.0;y<10.0+h;y+=h)
    {
        fprintf(clear,"%8.3f  %8.3f\n",x,y);
        fprintf(clear,"%8.3f  %8.3f\n",y,x);        
        float r2=x*x+y*y;
        float xd=x+F*r2*x;
        float yd=y+F*r2*y;
        fprintf(dist,"%8.3f  %8.3f\n",xd,yd);
        fprintf(dist,"%8.3f  %8.3f\n",yd,xd);        
    }
    fclose(clear);
    fclose(dist);
    return 0;
}


Самая простейшая реализация (C99), выводит координаты точек в файл. Если нарисовать результат, получится нечто вроде того, что содержится в прикрепленном файле. Красная сетка - исходная, зеленая - получившаяся в результате дисторсии третьего порядка (для F3=0.001, знак положителен, соответственно, получается "подушка").

Автор: newbie2009 9.3.2012, 20:25
А почему вы взяли дисторию 3го порядка именно?

Автор: Фантом 9.3.2012, 20:44
Цитата(newbie2009 @  9.3.2012,  21:25 Найти цитируемый пост)
А почему вы взяли дисторию 3го порядка именно? 


Вы же сами хотели "эффект как на картинке". А если внимательно прочитать подпись под картинкой, то там обнаружится следующее:
Цитата

Идеальное без дисторсии, с «подушкой» и «бочкой».


Затем, в том же разделе "теория" той же статьи из Википедии читаем следующее:
Цитата

F_3 — дисторсия третьего порядка, которая обычно вносит наибольший вклад в искажение формы. Если F_3 имеет тот же знак, что и b_0, возникнет «подушка», в противном случае — «бочка».


P.S. Когда-то в FIDO ходила шутка про то, что "Чтение мануалов вслух с выражением - 100$ в час." По-моему, уже пора начинать читать статью из Википедии самостоятельно, без моей помощи.  smile 

Автор: newbie2009 9.3.2012, 21:50
А где Вы строили эти графики по точкам (я пробывал в экселе и что-то у меня так красиво не получилось)? ;) И не подскажешь как это красиво сделать для целых координат, а то мне надо это применять для битмапа, а там я работаю с целыми числами и просто округления вроде не очень хорошо получается...

Автор: mrgloom 11.3.2012, 15:06
называется подушка\бочка barrel\pincushion

http://en.wikipedia.org/wiki/Distortion_(optics)
кол-во коэфициентов может быть и больше 3, но обычно не применяют, т.к. старшие члены мало влияют(формула в статье),
 radial distortion coefficient и tangential distortion coefficient это искажения из-за различных физических причин на линзе вроде.

чтобы не возится с интерполяцией можно сделать через remap в opencv.

Автор: Алина96 17.3.2017, 15:03
Добрый день! Поставлена задача в Делфи7, есть обычное изображение, в итоге необходимо получить изображение с дисторсией. Помогите, пожалуйста.

Автор: Akina 17.3.2017, 18:43
А что сделано-то? в чём помогать? где описание конкретной проблемы?

Автор: Onan 30.4.2017, 01:29
Цитата(Akina @ 17.3.2017,  18:43)
А что сделано-то? в чём помогать? где описание конкретной проблемы?

ПОКАЖИТЕ НА ПРИМЕРЕ ПРЕОБРАЗОВАНЕЕ ТОЧЬКИ ИЗОБРАЖЭНИЯ 1920х1080 С КООРД ПУСТЬ БУДЕТ (841, 338) В ТОЧКУ С ОТРЭЦАЦЕЛЬНОЙ ДИСТОРСИЕЙ ЭТОГО ИЗОБРАЖЭНИЯ (УГЛЫ КОРОЧИ НА 100),  РАСПИСАТЬ ПРЭОБРАЗОВАНЕЕ КАК РЭШЭНИЕ ЗАДАЧИ В РЭЩЭБНИКЕ ПО МАТЕМАТИКЕ - ФОРМУЛА  И ПОД СТАНОВКА ЗНАЧЭНЕЙ !!!

Автор: vpf 30.4.2017, 09:23
Выше по теме все вроде рассказали про дисторсию...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)