LXF135:Perl

Материал из Linuxformat.

Версия от 10:05, 3 ноября 2011; Crazy Rebel (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Math::FFT Perl и ма­те­ма­ти­че­ские пре­об­ра­зо­ва­ния «вы­тя­нут» без­на­деж­ные с виду сним­ки

Perl: По­вы­сим ка­че­ст­во фо­то

Perl Марко Фиоретти
Perl Ми­ха­ил Смир­нов
Часть 2: Боль­шин­ст­во, на­вер­ное, возь­мет для этих це­лей гра­фи­че­ский ре­дак­тор, но Ми­ха­ил Смир­нов про­де­ла­ет все сам, с по­мо­щью Perl и из­ряд­ной до­ли ма­те­ма­ти­ки.

Наи­бо­лее важ­ной ха­рак­те­ри­сти­кой циф­ро­вой фо­то- и ви­део­техники яв­ля­ет­ся раз­ре­шаю­щая спо­соб­ность пре­об­ра­зо­ва­те­лей све­та в элек­три­че­ский сиг­нал. Чем она луч­ше, тем бо­лее мел­кие де­та­ли мы мо­жем на­блю­дать в изо­бра­жении. В со­вре­мен­ных бы­то­вых циф­ро­вых фо­то- и ви­деоуст­рой­ствах та­ки­ми пре­об­ра­зо­ва­те­ля­ми яв­ля­ют­ся по­лу­про­воднико­вые при­бо­ры с за­ря­до­вой свя­зью (ПЗС), ко­то­рые не так уж дав­но при­шли на сме­ну фо­то­плен­ке и ва­ку­ум­ным пре­об­ра­зо­ва­те­лям све­та. Основ­ное пре­иму­ще­ство ПЗС пе­ред фо­то­плен­кой со­сто­ит в воз­мож­но­сти ре­ги­ст­ри­ро­вать зна­чи­тель­но боль­ший диа­па­зон внешней осве­щен­но­сти или, ина­че го­во­ря, по­лу­чать зна­чи­тель­но боль­шее ко­ли­че­ство гра­да­ций по­лу­то­нов в изо­бра­жении. Пре­иму­ще­ство пе­ред ва­ку­ум­ной техникой, пре­ж­де все­го, ха­рак­те­ри­зу­ет­ся прак­ти­че­ски сто­про­цент­ным исклю­чением гео­мет­ри­че­ских иска­жений. Сла­бым ме­стом пер­вых ПЗС-раз­ра­бо­ток яв­ля­лось низ­кое оп­ти­че­ское раз­ре­шение, что бы­ло свя­за­но с круп­ным раз­ме­ром фо­то­чув­стви­тель­ных яче­ек ПЗС. Чем мень­ше гео­мет­ри­че­ский раз­мер яче­ек и чем боль­ше ко­ли­че­ство та­ких яче­ек в чи­пе ПЗС, тем луч­шее оп­ти­че­ское раз­ре­шение мож­но по­лу­чить. Ко­ли­че­ство яче­ек по го­ри­зон­та­ли и вер­тика­ли оп­ре­де­ля­ют раз­мер циф­ро­во­го изо­бра­жения в пик­се­лях по ши­рине и вы­со­те.

В пер­вых раз­ра­бот­ках, осо­бен­но фо­то­техники, при­ме­ня­лась про­це­ду­ра искусствен­но­го уве­ли­чения ко­ли­че­ства пик­се­лей с по­мо­щью ин­тер­по­ля­ции. Эта про­це­ду­ра по­лу­чи­ла на­звание «элек­трон­но­го зу­ма», при­менение ко­то­ро­го мо­жет соз­да­вать толь­ко ил­лю­зию улуч­шения ка­че­ства изо­бра­жения. Вме­сте с тем, та­кая чи­сло­вая ха­рак­те­ри­сти­ка, как ко­ли­че­ство пик­се­лей, да­ет лишь об­щее пред­став­ление о ка­че­стве и ре­аль­ном оп­ти­че­ском раз­ре­шении. Что­бы бо­лее точ­но ра­зо­брать­ся в этом во­про­се, нуж­но при­влечь к рас­смот­рению функ­цио­наль­ную ха­рак­те­ри­сти­ку – пе­ре­да­точ­ную функ­цию ПЗС.

Немно­го тео­рии

Рис. 1 Рис. 1. Функ­ция пе­ре­да­чи мо­ду­ля­ции ка­ме­ры на ПЗС.

Пе­ре­да­точ­ная ха­рак­те­ри­сти­ка уст­рой­ства на ПЗС – сканера, циф­ро­во­го фо­то­ап­па­ра­та или ви­део­ка­ме­ры – пол­но­стью опи­сы­ва­ет­ся функ­ци­ей пе­ре­да­чи мо­ду­ля­ции (ФПМ), ко­то­рая ха­рак­те­ри­зу­ет па­дение кон­тра­ста си­ну­сои­даль­ных со­став­ляю­щих сиг­на­ла изо­бра­жения в об­ласти про­стран­ствен­ных частот. При оцен­ке пе­ре­да­точ­ной ха­рак­те­ри­сти­ки этих уст­ройств од­но­вре­мен­но бу­дет учи­ты­вать­ся и ФПМ оп­ти­че­ско­го объ­ек­ти­ва, ко­то­рый фо­ку­си­ру­ет изо­бра­жение в плоско­сти чи­па ПЗС. В оп­ти­ке про­стран­ствен­ные часто­ты оп­ре­де­ля­ют­ся как чис­ло линий на мил­ли­метр, то есть ве­ли­чи­ной [1/мм]. В ка­че­стве при­ме­ра на рис. 1 пред­став­ле­на ти­пич­ная кри­вая ФПМ ка­ме­ры на ПЗС.

ФПМ ха­рак­те­ри­зу­ет связь ме­ж­ду ис­ход­ным объ­ек­том и его изо­бра­жением. Рас­смот­рим в ка­че­стве объ­ек­та си­ну­сои­даль­ное рас­пре­де­ление кон­тра­ста, по­ка­зан­ное на рис. 2а. Часто­та си­ну­сои­ды рав­на 20 1/мм, то есть на од­ном мил­ли­мет­ре ук­ла­ды­ва­ет­ся 20 пе­рио­дов си­ну­сои­ды.

На рис. 2б и 2в пред­став­ле­ны се­чения си­ну­сои­даль­но­го объ­ек­та. Раз­мах си­ну­сои­ды на рис. 2б ха­рак­те­ри­зу­ет кон­траст объ­ек­та на вхо­де уст­рой­ства. На вы­хо­де оп­ти­ко-элек­трон­но­го уст­рой­ства изо­бра­жение си­ну­сои­ды бу­дет ха­рак­те­ри­зо­вать­ся се­чением, по­ка­зан­ным на рис. 2в. Та­ким об­ра­зом, вид­но, что ФПМ на часто­те 20 1/мм по­ка­зы­ва­ет па­дение сиг­на­ла си­ну­сои­ды с ве­ли­чи­ны 1.0 на вхо­де уст­рой­ства до ве­ли­чи­ны при­мер­но 0.18 на его вы­хо­де.

Рис. 2 Рис. 2. При­мер син­те­за изо­бра­же­ния.

Рис. 3 Рис. 3. Край по­лу­плос­ко­сти: а) тес­то­вое изо­бра­же­ние края по­лу­плос­ко­сти, б) се­че­ние края по­лу­плос­ко­сти, в) функ­ция рас­сея­ния ли­нии, г) ФПМ уст­рой­ст­ва на ПЗС, д) де­фо­ку­си­ро­воч­ная кри­вая.

Для по­лу­чения зна­чений ФПМ на всех про­стран­ствен­ных часто­тах по­тре­бу­ет­ся мно­же­ство си­ну­сои­даль­ных объ­ек­тов с раз­лич­ны­ми часто­та­ми. Од­на­ко в этом нет необ­хо­ди­мо­сти, ес­ли восполь­зо­вать­ся объ­ек­том в ви­де про­тя­жен­но­го рез­ко­го скач­ка кон­тра­ста, по­лу­чив­ше­го на­звание «края по­лу­плоско­сти». Изо­бра­жение края по­лу­плоско­сти по­ка­за­но на рис. 3а. Что­бы по­лу­чить иско­мую ФПМ, необ­хо­ди­мо вы­полнить диф­фе­рен­ци­ро­вание края по­лу­плоско­сти (по нор­ма­ли к краю), а за­тем сде­лать пре­об­ра­зо­вание Фу­рье.

По­сле­до­ва­тель­ность и ре­зуль­та­ты пре­об­ра­зо­ваний ил­лю­ст­ри­ру­ют­ся на рис. 3. На рис. 3б по­ка­за­но од­но из се­чений края по­лу­плоско­сти. Что­бы снизить влияние шу­мов ПЗС, пе­ред диф­фе­рен­ци­ро­ванием пред­ва­ри­тель­но вы­пол­ня­ет­ся усреднение се­чений края по­лу­плоско­сти. Сум­ми­ро­вание m се­чений края по­лу­плос­ко­сти обес­пе­чи­ва­ет по­вы­шение от­но­шения сиг­нал-шум в ко­рень из m раз. Ре­зуль­тат диф­фе­рен­ци­ро­вания усреднен­но­го се­чения края по­лу­плоско­сти по­ка­зан на рис. 3в – по­лу­чен­ное на­ми рас­пре­де­ление на­зы­ва­ет­ся функ­ци­ей рас­сеяния линии. Для оп­ре­де­ления ФПМ оста­ет­ся вы­полнить пре­об­ра­зо­вание Фу­рье функ­ции рас­сеяния и за­тем вы­чис­лить мо­дуль от по­лу­чен­ных ком­плекс­ных ко­эф­фи­ци­ен­тов Фу­рье (рис. 3г). Что­бы оценить ошиб­ку, ко­то­рую вно­сит циф­ро­вая оп­ти­ко-элек­трон­ная систе­ма, по­тре­бу­ет­ся вы­полнить вы­чи­тание по­лу­чен­ной на­ми ФПМ H(v) из так на­зы­вае­мой ди­фрак­ци­он­ной ФПМ Ĥ(v), ко­то­рая име­ет мак­си­маль­но дости­жи­мую часто­ту vm:

U(v) = Ĥ(v) – H(v)

v – про­стран­ствен­ная часто­та. Пре­дель­ная часто­та ди­фрак­ци­он­ной ФПМ оп­ре­де­ля­ет­ся про­стой фор­му­лой vm = F/λD, где F – фо­кусное рас­стояние объ­ек­ти­ва; D – диа­метр объ­ек­ти­ва; λ – дли­на вол­ны све­та, обыч­но принима­ет­ся рав­ной 660 на­но­мет­рам (оран­же­вый цвет).

Ди­фрак­ци­он­ная ФПМ (крас­ная линия на рис. 3г) пред­став­ля­ет со­бой на­клон­ную пря­мую, рав­ную 1 на ну­ле­вой часто­те v = 0 и рав­ную 0 на ди­фрак­ци­он­ной часто­те vm. При­мер раз­но­ст­ной ФПМ U(v) по­ка­зан на рис. 3д. Кри­вая на рис. 3д ха­рак­те­ри­зу­ет ве­ли­чи­ну ошиб­ки пе­ре­да­чи кон­тра­ста, ко­то­рая обу­слов­ле­на ре­аль­ной оп­ти­ко-элек­трон­ной систе­мой на ПЗС. Во мно­гих слу­ча­ях по­доб­ная ошиб­ка свя­за­на с рас­фо­ку­си­ров­кой объ­ек­ти­ва (по­те­рей рез­ко­сти). И дей­стви­тель­но, рас­пре­де­ление на рис. 3д на­по­ми­на­ет де­фо­ку­си­ро­воч­ную кри­вую.

Раз­лич­ные ва­ри­ан­ты на­строй­ки фо­ку­са объ­ек­ти­ва бу­дут, в той или иной сте­пени, при­во­дить к по­те­ре рез­ко­сти. Чем сильнее рас­стро­ен объ­ек­тив, тем боль­ше бу­дут зна­чения раз­но­ст­ной функ­ции U(v) и тем ху­же оп­ти­че­ское раз­ре­шение. При этом по пи­ку кри­вой мож­но оценить про­стран­ствен­ную часто­ту v, на ко­то­рой ФПМ име­ет наи­боль­ший гра­ди­ент па­дения кон­тра­ста. Ес­ли не при-нимать в рас­чет шу­мы ка­ме­ры на ПЗС, то наи­боль­шее раз­ре­шение оп­ти­ко-элек­трон­ной систе­мы оп­ре­де­ля­ет­ся со­от­но­шением vL=1/2L, где L – линей­ный раз­мер ячей­ки ПЗС. Для ре­аль­ных систем уро­вень шу­ма на вы­со­ких часто­тах бу­дет пре­вы­шать сиг­нал изо­бра­жения, и ре­аль­ное пре­дель­ное раз­ре­шение vr бу­дет зна­чи­тель­но ниже vL.

При­мер ко­да для по­лу­чения иско­мой ФПМ по­ка­зан ниже. Ис­ход­ная мат­ри­ца изо­бра­жения B(x,y) края по­лу­плоско­сти со­дер­жит­ся в дву­мер­ном мас­си­ве @B. На­чаль­ная и конеч­ная стро­ки сум­ми­ро­вания за­да­ют­ся па­ра­мет­ра­ми $row1 и $row2, со­от­вет­ствен­но.

for($j=$row1;$j<$row2; $j++){
 for($i=0;$i<$N; $i++){
		 $g[$i] +=$B[$i][$j];
 }}	
 $Nrr=$row2-$row1-1;
 @g=map($_/$Nrr, @g);
 for($i=1;$i<$N; $i++){
   $PSF[$i] = $g[$i] - $g[$i-1];
 }
 use Math::FFT;
 for($i=0;$i<$N;$i++){
		 $data->[2*$i]=$PSF[$i];
		 $data->[2*$i+1]=0;
 }
 $fft = new Math::FFT($data);
 $coeff = $fft->cdft();
 for($i=0;$i<$N;$i++){				
   $H[$i] = sqrt ( $coeff->[2*$i]**2 + $coeff->[2*$i+1]**2 );
 }	
 @H=map($_/$H[0], @H);

Ре­зуль­тат диф­фе­рен­ци­ро­вания за­но­сит­ся в мас­сив @PSF, ко­то­рый пред­став­ля­ет со­бой функ­цию рас­сеяния линии. Для вы­полнения пре­об­ра­зо­вания Фу­рье восполь­зу­ем­ся ма­те­ма­ти­че­ской биб­лио­ те­кой Perl Math::FFT, в ко­то­рой реа­ли­зо­ван ал­го­ритм бы­ст­ро­го пре­об­ра­зо­вания. Од­но­мер­ное пре­об­ра­зо­вание Фу­рье в этой биб­лио­те­ке вы­пол­ня­ет­ся с по­мо­щью под­про­грам­мы cdft().

Ре­зуль­тат пре­об­ра­зо­вания Фу­рье за­но­сит­ся в мас­сив ко­эф­фи­ци­ен­тов $coeff, где ко­эф­фи­ци­ен­ты с чет­ным ин­дек­сом со­от­вет­ству­ют ре­аль­ной части, а ко­эф­фи­ци­ен­ты с нечет­ным ин­дек­сом – мнимой части ком­плекс­но­го чис­ла, со­от­вет­ствен­но. Ре­зуль­ти­рую­щая ФПМ за­но­сит­ся в мас­сив @H, зна­чения ко­то­ро­го нор­ми­ру­ют­ся к пер­во­му зна­чению мас­си­ва $H[0], со­от­вет­ствую­ще­му по­сто­ян­ной со­став­ляю­щей изо­бра­жения. Та­ким об­ра­зом, $H[0]=1, а все осталь­ные зна­чения ФПМ мень­ше единицы.

На рис. 3г, вме­сте с вы­чис­лен­ной на­ми ФПМ, крас­ной линией по­ка­за­на ди­фрак­ци­он­ная оп­ти­че­ская функ­ция. Та­ким об­ра­зом, чем бли­же ФПМ на­ше­го уст­рой­ства к ди­фрак­ци­он­ной функ­ции, тем с бо­лее вы­со­ким ка­че­ством мы смо­жем по­лу­чать на­ши фо­то­изобра­жения.

Улуч­шение ка­че­ства

Вы­вод, по­лу­чен­ный на­ми в пре­ды­ду­щем раз­де­ле, по­зво­ля­ет сфор­му­ли­ро­вать под­ход для улуч­шения ка­че­ства фо­то­изо­бра­жений, а имен­но: ком­пен­си­ро­вать па­дение ФПМ на тех часто­тах, где оно вы­ра­жа­ет­ся наи­бо­лее силь­но, и при­бли­зить тем са­мым ФПМ к ди­фрак­ци­он­но­му пре­де­лу. В циф­ро­вой об­ра­бот­ке изо­бра­жений та­кие восста­нав­ли­ваю­щие фильт­ры по­лу­чи­ли на­звание об­рат­ных или ин­верс­ных. Ма­те­ма­ти­че­ски это вы­ра­жа­ет­ся доста­точ­но про­сто, а имен­но: спектр ис­ход­но­го фо­то­изо­бра­жения S(v) необ­хо­ди­мо ум­но­жить на функ­цию, об­рат­ную ФПМ уст­рой­ства на ПЗС, ко­то­рую мы ранее восста­но­ви­ли из изо­бра­жения края по­лу­плоско­сти. В пред­по­ло­жении, что мощ­ность шу­ма прене­б­ре­­жи­мо ма­ла, спектр восста­нов­лен­но­го изо­бра­жения ра­вен от­но­шению S1(v) = S(v)/H(v), то есть функ­ция иде­аль­но­го фильт­ра Q(v) = 1/H(v). Принимая во внимание шу­мы, ко­то­рые вно­сят­ся лю­бой ре­аль­ной систе­мой, необ­хо­ди­мо най­ти ре­шение для Q(v) на тех часто­тах v > vr, где шум пре­вы­ша­ет сиг­нал. Пре­дель­ная часто­та vr оценива­ет­ся как часто­та, на ко­то­рой дис­пер­сия (энер­гия) шу­ма на­чи­на­ет пре­вы­шать зна­чения ФПМ. Один из ва­ри­ан­тов оп­ти­маль­но­го фильт­ра име­ет вид

Рис. 4 Рис. 4. Оп­ти­маль­ный ли­ней­ный фильтр для улуч­ше­ния фо­то­изо­бра­же­ний.

 Q(v)= [1 + H(vr)2]•H(v)/[H(vr)2 + H(v)2] (1)

На рис. 4 по­ка­зан ре­зуль­тат рас­че­та фильт­ра по фор­му­ле (1). Ин­верс­ные оп­ти­маль­ные фильт­ры, ис­поль­зую­щие восста­нов­лен­ные ФПМ, обес­пе­чи­ва­ют по­вы­шение кон­тра­стности на тех про­стран­ствен­ных часто­тах, на ко­то­рых это па­дение обу­слов­ле­но ре­аль­ной оп­ти­ко-элек­трон­ной систе­мой. Это основ­ное от­ли­чие восста­нав­ли­ваю­щих фильт­ров от «сле­пых» фильт­ров вы­со­ких частот или опе­ра­то­ров ти­па Со­бе­ля для под­чер­ки­вания границ, при­ме­няе­мых в распространен­ных про­грамм­ных па­ке­тах.

Ал­го­ритм улуч­шения ка­че­ства фо­то­изо­бра­жения с по­мо­щью ин­верс­ной фильт­ра­ции вклю­ча­ет сле­дую­щие эта­пы. На пер­вом эта­пе осу­ще­ств­ля­ет­ся пре­об­ра­зо­вание Фу­рье ис­ход­но­го фо­то­изо­бра­жения B(x,y) и по­лу­чение спек­тра S(vx,vy). На вто­ром эта­пе фор­ми­ру­ет­ся ин­верс­ный фильтр Q(vx,vy), зна­чения ко­то­ро­го ум­но­жа­ют­ся на спектр S(vx,vy). На треть­ем эта­пе вы­пол­ня­ет­ся об­рат­ное пре­об­ра­зо­вание Фу­рье про­из­ве­дения S1(vx,vy) = S(vx,vy)•Q(vx,vy), ре­зуль­та­том ко­то­ро­го бу­дет яв­лять­ся восста­нов­лен­ное изо­бра­жение B1(x,y).

Пер­вый и тре­тий эта­пы реа­ли­зу­ют­ся с по­мо­щью стан­дарт­ных под­про­грамм од­но­мер­но­го пре­об­ра­зо­вания Фу­рье мо­ду­ля Perl Math::FFT. Дву­мер­ное пре­об­ра­зо­вание Фу­рье по­лу­ча­ет­ся с по­мо­щью по­сле­до­ва­тель­но­го при­менения од­но­мер­но­го пре­об­ра­зо­вания, на­при­мер, к функ­ции изо­бра­жения B(x,y) сна­ча­ла по стро­кам, а за­тем по столб­цам мат­ри­цы. От­ме­тим, что пре­об­ра­зо­ванию под­вер­га­ют­ся RGB-ком­понен­ты цвет­но­го изо­бра­жения по от­дель­но­сти. В на­ших при­ме­рах ис­поль­зу­ет­ся ком­понен­та Blue ис­ход­но­го RGB-изо­бра­жения. Клю­че­вым эта­пом пре­об­ра­зо­вания яв­ля­ет­ся вто­рой этап, обес­пе­чи­ваю­щий раз­вер­ты­вание од­но­мер­ной функ­ции фильт­ра в дву­мер­ный мас­сив и ум­но­жение зна­чений фильт­ра на спектр ис­ход­но­го изо­бра­жения. Фраг­мент про­грамм­ной реа­ли­за­ции та­ко­го ал­го­рит­ма фильт­ра­ции пред­став­лен ниже:

$N2=$N/2;
 for($i=0;$i<$N2;$i++) {
 $FILTER[$i] = (1.+ $MTF[$nf]**2)*$MTF[$i]/($MTF[$nf]**2 +
 $MTF[$i]**2);
 }
 for($j=0;$j<$N; $j++){
 for($i=0;$i<$N; $i++){ 
 		 $w2[$i][$j]=0;
 }}
 &d2cdft(\@B,\@w2,\$N,\$PI);
 for($k=0;$k<$N; $k++){
 $k1=$k;
 		 if($k > $N2) { $k1=$k-$N;}
 		 $x=$k1**2;
 for($j=0;$j<$N; $j++){
 $j1=$j;
 		 if($j > $N2) { $j1=$j-$N;}
 		 $R = sqrt ( $x +$j1**2 );
 	 $Q = &parv(\$R,\@Xc,\@FILTER,\$N2);
 $Re[$k][$j] *=$Q;
 $Im[$k][$j] *=$Q;
 }}
 &d2cdfti(\@Re,\@Im,\$N,\$PI);

Вход­ное фо­то­изо­бра­жение со­дер­жит­ся в дву­мер­ном мас­си­ве @B. Пря­мое и об­рат­ное дву­мер­ное пре­об­ра­зо­вание Фу­рье вы­пол­ня­ют­ся с по­мо­щью под­про­грамм d2cdft() и d2cdfti(), со­от­вет­ствен­но. Ис­ход­ная функ­ция ФПМ, по­лу­чен­ная на­ми вы­ше, на­хо­дит­ся в мас­си­ве @MTF. Функ­ция фильт­ра, рас­счи­тан­ная по фор­му­ле (1), за­но­сит­ся в од­но­мер­ный мас­сив @FILTER. Для по­лу­чения дву­мер­ной функ­ции фильт­ра Q(vx,vy) ис­поль­зу­ет­ся под­про­грам­ма линей­ной ин­тер­по­ля­ции parv(), ко­то­рая обес­пе­чи­ва­ет вы­чис­ление про­ме­жу­точ­ных зна­чений фильт­ра в плоско­сти про­стран­ствен­ныхчастот (vx,vy). Па­ра­метр R яв­ля­ет­ся те­ку­щим ра­диу­сом, а вспо­мо­га­тель­ный мас­сив @Xc пред­став­ля­ет со­бой мас­сив ар­гу­мен­та вход­ной функ­ции фильт­ра, и, в ча­ст­но­сти, мо­жет быть за­дан как без­раз­мер­ная функ­ция с единич­ным ша­гом:

for($j=0;$j<$N2; $j++){$Xc[$j]=$j;}

Вы­ход­ные зна­чения восста­нов­лен­но­го спек­тра S1 фо­то­изо­бра­жения за­но­сят­ся в мас­си­вы ре­аль­ной @Re и мнимой @Im части ком­плекс­но­го спек­тра S1, со­от­вет­ствен­но. Ре­зуль­ти­рую­щее восста­нов­лен­ное изо­бра­жение, по­сле вы­полнения об­рат­но­го пре­об­ра­зо­вания Фу­рье с по­мо­щью под­про­грам­мы d2cdfti(), по­ме­ща­ет­ся в дву­мер­ный мас­сив @Re. На рис. 5 по­ка­за­но ис­ход­ное и восста­нов­лен­ное фо­то­изо­бра­жения, по­лу­чен­ные с по­мо­щью циф­ро­вой фо­то­ка­ме­ры в стан­дарт­ном ре­жи­ме съем­ки.

Рис. 5 Рис. 5. Ре­зуль­тат ком­пен­са­ции ФПМ фо­то­ка­ме­ры для стан­дарт­но­го ре­жи­ма съем­ки: а) ис­ход­ное фо­то­изо­бра­же­ние (Blue), б) ре­зуль­тат вос­ста­нов­ле­ния.

Рис. 6 Рис. 6. Ре­зуль­тат ком­пен­са­ции ФПМ фо­то­ка­ме­ры для ре­жи­ма съем­ки мак­ро: а) ис­ход­ное фо­то­изо­бра­же­ние (Blue), б) ре­зуль­тат вос­ста­нов­ле­ния.

Как пра­ви­ло, в этом ре­жи­ме съем­ки циф­ро­вые фо­то­гра­фии по­лу­ча­ют­ся вполне удов­ле­тво­ри­тель­но­го ка­че­ства. Ча­ще все­го понижен­ное ка­че­ство циф­ро­во­го фо­то свя­за­но с ре­жи­мом мак­ро­съем­ки. На рис. 6 по­ка­за­но ис­ход­ное и восста­нов­лен­ное фо­то­изо­бра­жения, ко­то­рые бы­ли по­лу­че­ны в этом режиме.

С точ­ки зрения на­груз­ки на про­цес­сор, при вы­полнении про­це­дур улуч­шения ка­че­ства наи­бо­лее за­трат­ной яв­ля­ет­ся про­це­ду­ра ин­тер­по­ля­ции. Для умень­шения вре­мени об­ра­бот­ки фо­то­изо­бра­жения мож­но за­ранее сфор­ми­ро­вать дву­мер­ную мат­ри­цу фильт­ра Q(vx,vy) и хранить его на диске. Для пе­ре­мно­жения мат­риц спек­тра ис­ход­но­го фо­то­изо­бра­жения S(vx,vy) и мат­ри­цы фильт­ра Q(vx,vy) мож­но восполь­зо­вать­ся па­ке­том (мо­ду­лем) Perl PDL. Основ­ное досто­ин­ство па­ке­та PDL – вы­со­кая ско­рость сло­жения и пе­ре­мно­жения мат­риц боль­шой раз­мер­но­сти и ком­пакт­ное хранение мас­си­вов дан­ных с пла­ваю­щей за­пя­той. На­при­мер, ска­ляр­ное про­из­ве­дение двух мат­риц ве­ще­ствен­ных чи­сел с пла­ваю­щей за­пя­той и раз­мер­но­стью 2048 × 2048 со­став­ля­ет око­ло 1 се­кун­ды, а сло­жение та­ких мат­ри­ц зай­мет до­ли се­кун­ды. Дву­мер­ный мас­сив чи­сел с пла­ваю­щей за­пя­той раз­мер­но­стью 1024 × 1024, принимая тип дан­ных PDL, бу­дет занимать все­го 4 МБ опе­ра­тив­ной па­мя­ти. Па­кет PDL по­зво­ля­ет ла­конич­но запи­сы­вать ма­те­ма­ти­че­ские опе­ра­то­ры для ра­бо­ты с мат­ри­ца­ми в ви­де од­ной стро­ки – на­при­мер, код для ска­ляр­но­го ум­но­жения двух мат­риц $a и $b бу­дет иметь вид

use PDL;
 $c = $a * $b;

Со­от­вет­ст­вен­но, код для пе­ре­мно­же­ния дву­мер­но­го ком­плекс­но­го спек­тра изо­бра­же­ния на дву­мер­ный фильтр за­пи­шет­ся в ви­де

$re = pdl[@Re];
 $im = pdl[@Im];
 $q = pdl[@Q];
 $re = $q*$re;
 $im = $q*$im;

Ува­жае­мый чи­та­тель, ес­ли вас по­на­ча­лу оза­да­чи­ли «пре­об­ра­зо­ва­ние Фу­рье» и реа­ли­за­ция ма­те­ма­ти­че­ских фор­мул, то от­не­си­тесь к ним как к «чер­но­му ящи­ку». Глав­ная поль­за при­ме­не­ния Math::FFT для оцен­ки ка­че­ст­ва со­сто­ит в том, что с по­мо­щью не­боль­шой про­грам­мы на Perl у вас поя­ви­лась воз­мож­ность объ­ек­тив­но срав­ни­вать оп­ти­че­ское раз­ре­ше­ние со­вре­мен­ных фо­то- и ви­део­сис­тем во всей по­ло­се ви­део­час­тот, а не ори­ен­ти­ро­вать­ся толь­ко на один па­ра­метр раз­ре­ше­ния – ко­ли­че­ст­во ме­га­пик­се­лей.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию