clear all;close all;
%%条件初始化
str = input('请输入图像的前缀:','s');
Width = input('请输入投影仪的分辨率(Width, []="1140"):','s');
if isempty(Width);
Width = 1140;
else
Width = str2double(Width);
end
Hight = input('请输入投影仪的分辨率(Hight, []="921"):','s');
if isempty(Hight);
Hight = 921;
else
Hight = str2double(Hight);
end
I = zeros(Hight,Width);
Direction = input('请输入条纹的方向("0"为单方向;"1"为双方向, []="0"):','s');
if isempty(Direction);
Direction = 0;
else
Direction = str2double(Direction);
end
Movenum = input('请输入相移步数 ([]="7"):','s');
if isempty(Movenum);
Movenum = 7;
else
Movenum = str2double(Movenum);
end
Pixelwidth = input('请输入条纹宽度(pixle []="38"):','s');
if isempty(Pixelwidth);
Pixelwidth = 38;
else
Pixelwidth = str2double(Pixelwidth);
end
% 单方向的解相位,读入图像
if Direction==0
Gray_order =ceil(log(double(Width/Pixelwidth))/log(2.0))+1;
Stripe_list = cell(Movenum,1);
Gray_list = cell(Gray_order,1);
end
if Direction==1
Gray_order =ceil(log(double(Hight/Pixelwidth))/log(2.0))+1;
Stripe_list = cell(Movenum,1);
Gray_list = cell(Gray_order,1);
end
for i = 1:Movenum
ImgName =[str,num2str(i-1)];
%I = double(rgb2gray((imread([ImgName,'.bmp']))));
imshow(I,[]);
%I = LoadMatrix([ImgName,'.bin'],'double');
% rgb2gray
Stripe_list{i} = I;
end
% for i = 1:Gray_order
% ImgName =[str,num2str(i+Movenum-1)];
% I = double((imread([ImgName,'.bmp'])));
% %I = LoadMatrix([ImgName,'.bin'],'double');
% Gray_list{i} = I;
% end
%%解相位得到折叠相位
Deltay = 0;
Deltax = 0;
for i=1:Movenum;
Deltay = Deltay+sin(2*pi*(i-1)/Movenum)*Stripe_list{i};
Deltax = Deltax+cos(2*pi*(i-1)/Movenum)*Stripe_list{i};
end
wphase = atan2(Deltay,Deltax);
figure,imshow(wphase,[]);
%%二值化
I_b = double((imread([str,num2str(Movenum+Gray_order),'.bmp'])));
%I_b = LoadMatrix([str,num2str(Movenum+Gray_order),'.bin'],'double');
I_w = double((imread([str,num2str(Movenum+Gray_order+1),'.bmp'])));
%I_w = LoadMatrix([str,num2str(Movenum+Gray_order+1),'.bin'],'double');
II = I_w-I_b;
Thresh = (I_b+I_w)*0.5;
%figure,imshow(Thresh,[]);
for i=1:Gray_order
Gray_list{i} = double((Gray_list{i}-Thresh)>0);
end
%figure,imshow(Thresh,[]);
%%解码
i = Gray_order;
while(i>0)
if(i==Gray_order)
Gray_list{i} = Gray_list{i};
else
Gray_list{i} = abs(Gray_list{i+1}-Gray_list{i});
end
i=i-1;
end
Code_value1=0.0;
Code_value2=0.0;
New_value = 0.0;
for i=1:Gray_order
Code_value1 = Gray_list{i}.*2.^(i-1)+Code_value1;
if(i>1)
Code_value2 = Gray_list{i}.*2.^(i-2)+Code_value2;
end
end
New_value = Code_value1-Code_value2;
%解相位
[m,n] = size(wphase);
unwph = zeros(m,n);
for i=1:m
for j= 1:n
if wphase(i,j)>pi/2;
unwph(i,j) = wphase(i,j)+Code_value2(i,j)*2*pi;
elseif wphase(i,j)<-pi/2;
unwph(i,j) = wphase(i,j)+(Code_value2(i,j)+1)*2*pi;
else
unwph(i,j) = wphase(i,j)+New_value(i,j)*2*pi;
end
end
end
PP = zeros(m,n);
for i=1:m
for j= 1:n
if(II(i,j)>10)
PP(i,j)=1;
end
end
end
unwph = unwph.*PP;
a=double(unwph(503,:));
figure(1),imshow(unwph,[]);
figure(2),plot(wphase(503,:),'r');
hold on,
plot(unwph(503,:),'r');
plot(New_value(503,:),'b');
plot(Code_value2(503,:),'g');
figure(3),mesh(unwph (2:20:end-1,2:20:end-1));
%save('unwph',unwph);
PP = zeros(964,1292);
for i=1:964
for j= 1:1292
if(I8(i,j)>10)
PP(i,j)=1;
end
end
end
2020-11-17
最新推荐文章于 2024-06-26 21:49:41 发布