二维相位解包裹

根据Itoh方法,可以将一维相位解包裹推广到二维相位解包裹中,可以用以下式子来表示:

【物理应用】多种二维相位解包裹matlab算法_matlab

式中, 【物理应用】多种二维相位解包裹matlab算法_物理应用_02为 【物理应用】多种二维相位解包裹matlab算法_物理应用_03点的连续相位, 【物理应用】多种二维相位解包裹matlab算法_matlab_04为起始的【物理应用】多种二维相位解包裹matlab算法_matlab_05点的连续相位, 【物理应用】多种二维相位解包裹matlab算法_matlab_06为相位图中连接【物理应用】多种二维相位解包裹matlab算法_物理应用_03点和【物理应用】多种二维相位解包裹matlab算法_matlab_08点的任意路径, 【物理应用】多种二维相位解包裹matlab算法_物理应用_09为相位差。

拓展后的Itoh方法,要写成代码的话,逻辑其实和一维的情况是一样的,只是原来只遍历一个一维的矩阵(或者数组),现在变为了二维的矩阵(或数组),具体方法如下:

选取相位图中的某一行(列)作为起始行(列),遍历相位图的每一行(列),比较相邻两个点的相位值,若相邻两点的相位差大于 pi,则后一个点的相位加2pi ;若相邻两点的相位差小于-pi ,则后一个点的相位减2pi ;若相邻两点的相位差大于-pi且小于pi ,则不需要进行操作直接比较下一个位置。

二维相位解包裹路径问题

从二维相位解包裹的式子中可以看出来,这一个路径积分要保证每一次算出来的【物理应用】多种二维相位解包裹matlab算法_物理应用_03点连续相位都一样,那就应该是一个与路径无关的计算过程。但是在实际的相位解包裹的过程中可以发现,选择了不同的路径,往往得到的相位值也不一样,这是实际获取的相位图存在采样率不足导致的相位混叠、获取过程中引入的相位噪声、奇异点等因素导致的,这也导致了正确的二维相位解包裹,是一个与路径有关的问题。

【物理应用】多种二维相位解包裹matlab算法_物理应用_11

正是因为解包裹过程与路径有关的问题,导致二维相位解包裹变得困难。

为了解决与路径有关的问题,相位解包裹其中一个大类也因此诞生了,空间(空域)相位解包裹(Spatial phase unwrapping),这类方法就是通过选择一条最优的路径去完成全图相位解包裹的,不过这留到以后的文章慢慢讲了。

fprintf('***************************************\n');

fprintf('2D Phase Unwrapping Demo\n');

fprintf('Please select the demo:\n');

fprintf('(1) No noise , no ignored region\n');

fprintf(' 2. With noise, no ignored region\n');

fprintf(' 3. No noise , with ignored region\n');

fprintf(' 4. With noise, with ignored region\n');

while (1)

user_input = input('Your selection (1-4): ', 's');

user_input = strip(user_input);


% if the user does not supply anything, select the default

if strcmp(user_input, '')

fprintf('Demo 1 is selected\n');

user_input = '1';

end


if length(user_input) == 1 && sum(user_input == '1234') == 1

break;

else

fprintf('Invalid input\n');

end

end



[X, Y] = meshgrid(linspace(-1, 1, 512) * 5);

img = -(X.*X + Y.*Y);

fprintf('Image size: %dx%d pixels\n', size(img,1), size(img,2));


% add noise

if any(user_input == '24')

img = img + randn(size(X)) * 0.5;

end


% add an ignored region

if any(user_input == '34')

img(end/4:3*end/4,end/4:3*end/4) = nan;

end


% wrap the image

wimg = wrapTo2Pi(img);


tic;

unwrap_img = unwrap_phase(wimg);

toc;


subplot(221);

pcolor(img);

shading flat;

set(gca, 'ydir', 'reverse');

title('Original phase');


subplot(222);

pcolor(wimg);

shading flat;

set(gca, 'ydir', 'reverse');

title('Wrapped phase');


subplot(223);

pcolor(unwrap_img);

shading flat;

set(gca, 'ydir', 'reverse');

title('Unwrapped phase');


subplot(224);

pcolor(wrapTo2Pi(unwrap_img));

shading flat;

set(gca, 'ydir', 'reverse');

title('Rewrap of unwrapped phase');
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  1.  

【物理应用】多种二维相位解包裹matlab算法_物理应用_12

【物理应用】多种二维相位解包裹matlab算法_物理应用_13