Моделирование и визуализация голограмм Фурье на Perl (часть 4)

Моделирование и визуализация голограмм Фурье на Perl АННОТАЦИЯ: Четвертая статья серии "Моделирование методов цифровой обработки сигналов на языке Perl" посвящена синтезу и визуализации цифровых голограмм при помощи математического модуля Math::FFT. В моделировании физических процессов трудно переоценить цифровые методы получения и восстановления голограмм, нашедших применение при решении многих прикладных задач от контроля качества оптических поверхностей до создания защитных голограмм. В предыдущих статьях серии было дано введение в математический пакет Math::FFT (Fast Fourier Transform) архива свободных программных ресурсов CPAN (Comprehensive Perl Archive Network) и представлены методы цифровой обработки и описания сигналов.

1. Синтез и визуализация голограмм Фурье и Френеля

Интерес к моделированию голограмм Фурье обусловлен потребностями многих прикладных задач [1], таких как неразрушающий контроль и метрология, оптическая пространственная фильтрация и обнаружение сигналов, создание моделей синтезированных апертур РЛС, создание защитных голограмм и других приложений.

По известным причинам [2], широкое распространение метода преобразования Фурье, явилось основой в моделировании и синтезе цифровых голограмм Фурье и Френеля. Цифровая модель голограммы Фурье представляет собой запись пространственного (двумерного) преобразования Фурье светового поля w(x,y), рассеянного предметом W(u,v), со смещением его пространственной несущей N и M относительно центра координат u=0, v=0, где u,v - пространственные частоты. Распределение интенсивности в плоскости регистрации голограммы описывается известным соотношением:
                    f(x,y) = A0 +|w(x,y)|cos[xM + yN + Ф(x,y)],
где постоянная A0 - максимальное значение w(x,y)=w(0,0), Ф(x,y) - аргумент комплексной функции светового поля w(x,y). При этом важно, что голограмма f(x,y) является вещественной, положительной и содержит полную информацию об объекте W(u,v), а именно известна амплитуда |w(x,y)| и фаза Ф(x,y) поля w(x,y). Преобразование Фурье функции голограммы f(x,y) будет содержать сумму двух изображений объекта W(u,v), смещенных относительно начала координат (u,v) на величину несущих частот M и N:
                    W1(u,v) = W(u-M,v-N) + W(-u-M,-v-N) + A(u,v),     (1)
где A(u,v) - автокорреляционная функция W(u,v), которая обычно подавляется цифровыми методами. Второе изображение W(-u-M,-v-N) является зеркальным отображением W(u-M,v-N). Выражение (1) представляет собой алгоритмом для получения голограммы f(x,y), удовлетворяющей условию существования вещественной положительной функции. Последовательность процедур для синтеза голограммы состоит из следующих этапов:

а) создание изображения объекта W(x,y) и его перенос в область пространственных частот (u,v) со смещением на величину пространственных несущих M и N: W(u-M,v-N);
б) создание зеркального изображения и пространственное суммирование с W(u-M,v-N):
                    W(u,v) = bW(u-M,v-N) + bW(-u-M,-v-N) + A0,           (2)
где b - коэффициент усиления;
в) выполнение обратного преобразования Фурье функции W(u,v).

На рис.1а представлено изображение объекта, пространственно совмещенное с его зеркальным отображением, а на рис.1б представлена цифровая голограмма Фурье f(x,y), полученная в соответствии с выше изложенным алгоритмом. Коэффициент усиления b=4335.

изображение объекта цифровая голограмма Фурье
Рис.1, а - изображение объекта, б - цифровая голограмма Фурье.

Фрагмент кода программы для получения изображения голограммы Фурье представлен ниже.
$M=$N=33;
$NN=256;
$Q2=$Q/2;
$mode=1;
for($y=0;$y<$Yh; $y++){  
for($x=0;$x<$Xw; $x++){
          $w1[$x+$M][$y+$N] = $B[$x][$y];  
          $w1[$NN - $x - $M -1][$NN - $y - $N -1] = $B[$x][$y]; 
}}
if($mode==2){
          &d2cdfti(\@w1,\@w2,\$NN,\$PI);
          $max=0;
          for($y=0;$y<$NN; $y++){  
          for($x=0;$x<$NN; $x++){
                        $R[$x][$y]=$w1[$x][$y]; 
                        if($R[$x][$y]>$max){ $max=$R[$x][$y]; }
          }}
          &I__N(\$NN,\@R,\@w1);
}
$Xw=$NN;
$Yh=$NN;
for($y=0;$y<$Yh; $y++){  
                        $y1=$y*$Xw;   
for($x=0;$x<$Xw; $x++){
		if($mode==2){
                                 $OUT[$x + $y1]=$a0 + $Q2*$w1[$x][$y]/$max;   
                       }else{ 
                                 $OUT[$x + $y1]=$w1[$x][$y];
                        }
}}
  $HEAD[19]=int($Xw/256); 
  $HEAD[18]=$Xw - 256*$HEAD[19];
  $HEAD[23]=int($Yh/256); 
  $HEAD[22]=$Yh - 256*$HEAD[23];
  push(@HEAD,@OUT);					
  $rezult = pack("C*", @HEAD);	
  print "Content-Type: image/bmp\n\n";	
  binmode( STDOUT );
  print $rezult;
В представленной программе, массив @B содержит исходное распределение входного объекта. Число уровней квантования выходного изображения задается переменной $Q=256. Значения пространственных несущих трансформант заданы переменными $M и $N, а ширина и высота изображения объекта заданы переменными $Xw=32 и $Yh=32, соответственно. Размерность выходного изображения задана переменной $NN, а постоянная составляющая параметром $a0=128. В программе реализованы два режима. В режиме $mode=1 осуществляется построение изображения объекта с зеркальным отображением. В режиме $mode=2 выполняется расчет поля голограммы f(x,y) с помощью подпрограммы d2cdfti() двумерного обратного преобразования Фурье:
sub d2cdfti{
my $i,$j;
local(*Wx,*Wy,*N,*PI)=@_;
for($j=0;$j<$N; $j++){ 
for($i=0;$i<$N; $i++){
		$coeff->[2*$i]=$Wx[$i][$j];
		$coeff->[2*$i+1]=$Wy[$i][$j];
					}
$fft = new Math::FFT($coeff);					
$original_data = $fft->invcdft($coeff); 
for($i=0;$i<$N; $i++){					
		$Wx[$i][$j]=$original_data->[2*$i];
		$Wy[$i][$j]=$original_data->[2*$i+1];
					}	
}
Компактность кода, свойственная скриптам на Perl особенно наглядна при программировании двумерных быстрых ортогональных преобразований, и если не принимать во внимание операторы циклов for(), подпрограмма двумерного преобразования Фурье состоит всего из шести строк кода. Основой подпрограммы d2cdfti() является подпрограмма invcdft() одномерного инверсного преобразования Фурье из модуля Math::FFT. Подпрограмма &I__N(), не является обязательной, и нужна только для транспонирования поля голограммы в центр выходного изображения для наглядности. В качестве графического формата используется формат BMP, заголовок которого содержится в массиве @HEAD.

Для построения цифровой голограммы Френеля можно воспользоваться методом двойного преобразованием Фурье. Cначала необходимо выполнить преобразование Фурье от функции f(x,y) и результат этого преобразования умножить на фазовой множитель
                    c(u,v) = exp[pi(u*u + v*v)/D],
а затем выполнить обратное преобразование Фурье от полученного произведения, где D - параметр размерности изображения, заданный в переменной $NN.

2. Создание цифровых косинусных голограмм и голограмм Адамара

Цифровые методы позволяют реализовывать более быстрые и менее емкие методы создания голограмм на основе косинусного преобразования и преобразования Адамара. Эти обстоятельства играют существенную роль в аппаратурных реализациях. Примером могут служить цифровые сигнальные процессоры для обработки и кодирования сигналов изображения на основе дискретного косинусного преобразования при создании современных алгоритмов сжатия данных.

В косинусном преобразовании присутствуют только действительные числа. Благодаря этому, исчезает избыточность спектральных составляющих, присутствующих в преобразовании Фурье, обладающего свойством симметричного сопряжения. Очевидно, что дискретное косинусное преобразование не обладает осевой симметрией [3], и поэтому для поучения косинусной голограммы r(x,y) нужно реализовать более простую процедуру:
                    r(x,y) = K-1{W(u-M,v-N) + A0},
где K-1 - оператор обратного косинусного преобразования. На рис.2 представлен результат расчета косинусной голограммы.
Косинусная голограмма объекта в виде знака copyright  ©
Рис. 2. Косинусная голограмма объекта в виде знака copyright ©.

Программный код для получения косинусной голограммы будет практически такой же, как и представленный выше для вычисления цифровой голограммы Фурье. Основное отличие будет состоять в исключении строки кода для создания зеркального отображения. Другие отличия будут связаны с заменой подпрограммы двумерного преобразования Фурье на подпрограмму двумерного косинусного преобразования, основой которой является подпрограмма invrdft() одномерного инверсного косинусного преобразования из модуля Math::FFT.

Преобразование Адамара (Уолша-Адамара) является наиболее известным среди несинусоидальных ортогональных преобразований. Базисными функциями преобразования Фурье, а так же косинусного преобразования являются тригонометрические функции синуса и косинуса. Преобразование Адамара также являясь ортогональным преобразованием имеет базисные функции, которые принимают одно из двух значений ±1, образуя меандры (функции Уолша) [3]. Преобразование Адамара не обладает свойством осевой симметрии и для расчета цифровой голограммы Адамара h(x,y) потребуется выполнить процедуру
                    h(x,y) = H-1 {W(u-M,v-N) + A0},
где H-1 - оператор обратного преобразования Адамара. На рис.3 представлен результат расчета цифровой голограммы Адамара.
Голограмма Адамара объекта в виде знака copyright ©
Рис. 3. Голограмма Адамара объекта в виде знака copyright ©.

Программная реализация для расчета голограммы Адамара повторяет программу расчета косинусной голограммы, за исключением собственно процедуры, отвечающей за выполнение одномерного преобразования Адамара. Код подпрограммы на Perl для вычисления быстрого преобразования Адамара представлен ниже.
sub had{
local(*X,*M,*N,*sn)=@_;
$NV2=$N >> 1;     
$NM1=$N-1;
my $j=1;
for ($i=1;$i<=$NM1;$i++){
		        if($i>=$j){goto m5;}
		        $it=$i-1;
		        $jt=$j-1;
		        $tx = $X[$jt];
		        $X[$jt]=$X[$it];	
		        $X[$it]=$tx;	     
m5:         $k=$NV2;
m6:         if($k >=$j){goto m7;}
	   $j=$j-$k;
	   $k=$k >> 1;    
	   goto m6;
m7:         $j=$j+$k;
	   } 
	  $Le=1;
	  for ($L=1;$L<=$M;$L++) {
		                     $Le=$Le+$Le;
			         $Le1=$Le >> 1;  
			         for($j=1;$j<=$Le1;$j++){
			         for($i=$j;$i<=$N; $i+=$Le) {
				           $it=$i-1;
				           $ip=$it+$Le1;
				           $tx = $X[$ip];
				           $X[$ip]=$X[$it]-$tx;
				           $X[$it]=$X[$it]+$tx;
}}}
 	  if($sn<0){
	         for($i=0;$i<$N;$i++){ $X[$i]/=$N; }
                             }
}
В этой подпрограмме входной/выходной массив данных обозначен как массив @X. Размерность данных обозначена как $N, а параметр M является степенью 2: N=2M. Переменная $sn служит для задания прямого ($sn=1) или обратного ($sn=-1) преобразования Адамара.

3. Применение цифровых голограмм

Одним из наиболее интересных применений голографии являются задачи метрологии и неразрушающего контроля. Известно, что наличие интерференционных полос в голографическом изображении объекта связано с его смещением в процессе экспонирования голограммы. В цифровой голографии, как и в голографической интерферометрии, интерференционные полосы могут использоваться для оценки смещений, исследования вибраций и деформаций объектов. Сущность методики основывается на том, что интерференция между исходным объектом и его восстановленным изображением дает искомые интерференционные линии [4], которыми можно управлять во время оценки, например, передвигая объект.

Рассмотрим имитационный способ оценки смещений, применительно к восстановлению цифровой голограммы Фурье (1). На первом, предварительном этапе, необходимо зафиксировать в программе такие параметры, как ширина $Xw и высота $Yh изображения объекта и значения пространственных частот несущих $M и $N. Затем выполнить процедуру расчета цифровой голограммы Фурье пространственного распределения (2):
                    f(x,y) = F-1 { bW(u-M,v-N) + bW(-u-M,-v-N) + A0},  (3)
где F-1 - оператор обратного преобразования Фурье. В процессе "записи" голограммы f(x,y), осуществим смещение последней на Kx дискретных отсчетов вдоль оси абсцисс X:
                    f1(x,y) = f(x - Kx,y).
Пространственное смещение в плоскости голограммы (x,y) приведет к изменению значений пространственных несущих M и N в частотной плоскости (u,v). На последнем этапе необходимо восстановить голограмму f1(x,y) со значениями параметров $Xw, $Yh, $M и $N, при которых выполнялся расчет исходной голограммы f(x,y) по формуле (3). Для этого нужно выполнить прямое преобразование Фурье распределения f1(x,y):
                    W1(u,v) = F{ f1(x,y)},
где восстановленное распределение W1(u,v) представляет собой сумму двух изображений объекта, соответствующих формуле (1). На рис.4 зафиксирован результат восстановления бинарного объекта W1(u,v) при величине смещении Kx=7.
Результат восстановления бинарного объекта, при Kx=7
Рис. 4. Результат восстановления бинарного объекта, при Kx=7.

На рис.5 представлен результат восстановления полутонового объекта W1(u,v) при смещении как по оси абсцисс X, так и по оси ординат Y. Значения величин смещения составляли Kx=7 и Ky=5 дискретных отсчетов, соответственно.
Результат восстановления полутонового объекта, при Kx=7 и Ky=5
Рис. 5. Результат восстановления полутонового объекта, при Kx=7 и Ky=5.

Анализ результатов восстановления на рис.4 и рис.5 показывает, что число периодов полос интерференции соответствует параметрам смещения Kx и Ky, что и требовалось показать. Отметим, что повышение точности измерения смещений, по сравнению с непосредственным подсчетом пикселов, будет увеличиваться пропорционально частоте полос интерференции.

Другим важным применением цифровых голограмм Фурье является встраивание защитных голограмм в носители информации на твердой основе[5]. Объектами встраивания могут быть фотографии на фотобумаге или фотопленке, пластиковые карты, денежные купюры и другие носители информации на твердой основе, имеющие достаточный динамический диапазон для фиксирования полутонов. Формула для встраивания цифровых голограмм f(x,y) в изображение-контейнер g(x,y) имеет вид:
                    s(x,y) = g(x,y) + R{f(x,y)},                 (4)
где s(x,y) - результирующее изображение со встроенной голограммой объекта W(u,v). Оператор R служит для коррекции распределения интенсивности в голограмме и может быть нелинейным в общем случае.

Принцип получения цифровых голограмм Фурье для встраивания в носители информации аналогичен решению, рассмотренному выше в первом разделе. Следовательно, и программная реализация на Perl, представленная выше, так же может быть использована для этого. Процедура встраивания состоит из этапа создания голограммы по формуле (3) и пространственного сложения с изображением контейнера по формуле (4). На рис.6 представлено изображение, содержащее цифровую голограмму Фурье объекта W(u,v) в виде рисунка номинала денежной купюры.

Изображение-контейнер со встроенной голограммой Фурье объекта W(u,v) в виде номинала денежной купюры
Рис. 6. Изображение-контейнер со встроенной голограммой Фурье объекта в виде рисунка номинала денежной купюры.

После встраивания голограммы Фурье в изображение-контейнер, результирующее изображение наносится на специальную бумагу. При этом, встроенная голограмма является дополнительной степенью защиты денежной купюры и может быть идентифицирована на этапе проверки подлинности при восстановлении голограммы. Для восстановления голограммы, сначала осуществляется сканирование и оцифровка изображения s(x,y) со встроенной голограммой, а затем выполняется преобразование Фурье:
                    W1(u,v) = F{ s(x,y)},
при этом, значения пространственных несущих $M и $N и размеры изображения объекта $Xw и $Yh должны иметь те значения, при которых создавалась голограмма f(x,y). На рис.7 представлен результат восстановления голограммы, которая предварительно была встроена в изображение-контейнер.

Результат восстановления голограммы рисунка номинала денежной купюры, встроенной в изображение на рис.6
Рис. 7. Результат восстановления голограммы рисунка номинала денежной купюры, встроенной в изображение на рис.6.


4. Выводы

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

ЛИТЕРАТУРА:
[1] L. Yaroslavsky.  Digital holography: 30 years. 
[2] Дж. Гудмен.  Введение в Фурье-оптику.
[3] Н.Ахмед, K.Р. Рао.  Ортогональные преобразования при обработке цифровых сигналов 
[4] Н. Абрамсон.  Неразрушающий контроль  и метрология.
[5] М.В.Смирнов. Голографический подход к встраиванию скрытых водяных знаков в 
фотоизображения.

Home http://www.smirnov.sp.ru/
The elements of the probabilistic analysis of the Forex markethttp://www.smirnov.sp.ru/forex_html/forex3eng.html
Currency Prediction Software of market FOREXhttp://www.smirnov.sp.ru/forex_html/usd_euro15.html
Technology of a GUARD of text files from unauthorized copyinghttp://www.smirnov.sp.ru/graphic_text/pastxt1eng.html
Software for evaluating of ground resolution of remote sensing optical-systemhttp://www.smirnov.sp.ru/special/index.html
Objective estimation of digital scanners qualityhttp://www.smirnov.sp.ru/scanner/scan02.html
Watermarking photoshttp://www.smirnov.sp.ru/watermark/index.html
Restoration of imageshttp://www.smirnov.sp.ru/scanner/filter/index.html
Visual Gallery Manager 2.0http://www.smirnov.sp.ru/vgm20/index.html
Physical simulation of optical-electronic system of high-resolutionhttp://www.smirnov.sp.ru/simult_oes/index.html
Technology of counteraction to falsification of credit cardshttp://www.smirnov.sp.ru/watermark/cards/card_eng.html
Free Advertisment. Free Bulletin Board (english).http://www.smirnov.sp.ru/wwwboard/engboard.html
Free Advertisment. Free Bulletin Board (russian).http://www.smirnov.sp.ru/wwwboard/rusboard.html
Contact ushttp://www.smirnov.sp.ru/wwwboard/eng/contact.html
Ozon Bookshophttp://www.smirnov.sp.ru/ozon/index.html
Chat: CGI/Java Integrationhttp://www.smirnov.sp.ru/wwwboard/chatlink.html
The latent transfer and storage of the confidential information on the Internet and cellular communicationhttp://www.smirnov.sp.ru/watermark/conf_data/guarding_eng.html
Software Prices http://www.smirnov.sp.ru/prices/prices_eng.html
Smirnov HomePage http://www.smirnov.sp.ru/man/page1eng.html

St. Petersburg, Russia
Mobile: +7(921)343-33-97
E-mail: smirnoff04@mail.ru
http://www.smirnov.sp.ru/

Нанесение фотоизображения на камень