📄 qfwang_pmp.m
字号:
clear all
close all
clc
%%%%%%%%%%%%%%%%%%%%%%5%%以下用来计算RGB三通道间的影响
%%读取红色通道的数据
for i = 1:3
[filename,pathname] = uigetfile('*.bmp','打开要处理的红色图象......');
fName = strcat(pathname,filename);
a = double(imread(fName));
R{i} = a;
end
%%%%%分离出各个通道上的信息
ReFr1 = R{1};
ReFr2 = R{2};
ReFr3 = R{3};
%%%%%%
ReFr1r = ReFr1(:,:,1);
ReFr1g = ReFr1(:,:,2);
ReFr1b = ReFr1(:,:,3);
%%%%%%
ReFr2r = ReFr2(:,:,1);
ReFr2g = ReFr2(:,:,2);
ReFr2b = ReFr2(:,:,3);
%%%%%%
ReFr3r = ReFr3(:,:,1);
ReFr3g = ReFr3(:,:,2);
ReFr3b = ReFr3(:,:,3);
%%%%%%%%%%%%%%%%%%%%以下用来计算每个通道上的光强的背景强度和振幅以及它们的调制度
%背景光强度
RrI1 = (ReFr1r + ReFr2r + ReFr3r)/3;
RgI1 = (ReFr1g + ReFr2g + ReFr3g)/3;
RbI1 = (ReFr1b + ReFr2b + ReFr3b)/3;
%振幅
RrI2 = ((3*((ReFr1r - ReFr3r).^2) + (2*ReFr2r - ReFr1r - ReFr1r).^2).^(1/2))./3;
RgI2 = ((3*((ReFr1g - ReFr3g).^2) + (2*ReFr2g - ReFr1g - ReFr1g).^2).^(1/2))./3;
RbI2 = ((3*((ReFr1b - ReFr3b).^2) + (2*ReFr2b - ReFr1b - ReFr1b).^2).^(1/2))./3;
%%%%%调制度
RrM = RrI2./RrI1;
RgM = RgI2./RgI1;
RbM = RbI2./RbI1;
%%%%%%计算影响系数
Crg = sum(sum(RgM))/sum(sum(RrM));
Crb = sum(sum(RbM))/sum(sum(RrM));
%%清理内存
clear R RbI1 RbI2 RbM ReFr1 ReFr1r ReFr1g ReFr1b
clear ReFr2 ReFr2r ReFr2g ReFr2b ReFr3 ReFr3r ReFr3g ReFr3b
clear RgI1 RgI2 RgM RrI1 RrI2 RrM a fName filename pathname i
%%读取绿色通道的数据
for i = 1:3
[filename,pathname] = uigetfile('*.bmp','打开要处理的绿色图象......');
fName = strcat(pathname,filename);
a = double(imread(fName));
R{i} = a;
end
%%%%%分离出各个通道上的信息
GrFr1 = R{1};
GrFr2 = R{2};
GrFr3 = R{3};
%%%%%%
GrFr1r = GrFr1(:,:,1);
GrFr1g = GrFr1(:,:,2);
GrFr1b = GrFr1(:,:,3);
%%%%%%
GrFr2r = GrFr2(:,:,1);
GrFr2g = GrFr2(:,:,2);
GrFr2b = GrFr2(:,:,3);
%%%%%%
GrFr3r = GrFr3(:,:,1);
GrFr3g = GrFr3(:,:,2);
GrFr3b = GrFr3(:,:,3);
%%%%%%%%%%%%%%%%%%%%以下用来计算每个通道上的光强的背景强度和振幅以及它们的调制度
%背景光强度
GrI1 = (GrFr1r + GrFr2r + GrFr3r)/3;
GgI1 = (GrFr1g + GrFr2g + GrFr3g)/3;
GbI1 = (GrFr1b + GrFr2b + GrFr3b)/3;
%振幅
GrI2 = ((3*((GrFr1r - GrFr3r).^2) + (2*GrFr2r - GrFr1r - GrFr1r).^2).^(1/2))./3;
GgI2 = ((3*((GrFr1g - GrFr3g).^2) + (2*GrFr2g - GrFr1g - GrFr1g).^2).^(1/2))./3;
GbI2 = ((3*((GrFr1b - GrFr3b).^2) + (2*GrFr2b - GrFr1b - GrFr1b).^2).^(1/2))./3;
%%%%%调制度
GrM = GrI2./GrI1;
GgM = GgI2./GgI1;
GbM = GbI2./GbI1;
%%%%%%计算影响系数
Cgr = sum(sum(GrM))/sum(sum(GgM));
Cgb = sum(sum(GbM))/sum(sum(GgM));
%%清理内存
clear R GbI1 GbI2 GbM GrFr1 GrFr1r GrFr1g GrFr1b
clear GrFr2 GrFr2r GrFr2g GrFr2b GrFr3 GrFr3r GrFr3g GrFr3b
clear GgI1 GgI2 GgM GrI1 GrI2 GrM a fName filename pathname i
%%读取蓝色通道的数据
for i = 1:3
[filename,pathname] = uigetfile('*.bmp','打开要处理的蓝色图象......');
fName = strcat(pathname,filename);
a = double(imread(fName));
R{i} = a;
end
%%%%%分离出各个通道上的信息
BlFr1 = R{1};
BlFr2 = R{2};
BlFr3 = R{3};
%%%%%%
BlFr1r = BlFr1(:,:,1);
BlFr1g = BlFr1(:,:,2);
BlFr1b = BlFr1(:,:,3);
%%%%%%
BlFr2r = BlFr2(:,:,1);
BlFr2g = BlFr2(:,:,2);
BlFr2b = BlFr2(:,:,3);
%%%%%%
BlFr3r = BlFr3(:,:,1);
BlFr3g = BlFr3(:,:,2);
BlFr3b = BlFr3(:,:,3);
%%%%%%%%%%%%%%%%%%%%以下用来计算每个通道上的光强的背景强度和振幅以及它们的调制度
%背景光强度
BrI1 = (BlFr1r + BlFr2r + BlFr3r)/3;
BgI1 = (BlFr1g + BlFr2g + BlFr3g)/3;
BbI1 = (BlFr1b + BlFr2b + BlFr3b)/3;
%振幅
BrI2 = ((3*((BlFr1r - BlFr3r).^2) + (2*BlFr2r - BlFr1r - BlFr1r).^2).^(1/2))./3;
BgI2 = ((3*((BlFr1g - BlFr3g).^2) + (2*BlFr2g - BlFr1g - BlFr1g).^2).^(1/2))./3;
BbI2 = ((3*((BlFr1b - BlFr3b).^2) + (2*BlFr2b - BlFr1b - BlFr1b).^2).^(1/2))./3;
%%%%%调制度
BrM = BrI2./BrI1;
BgM = BgI2./BgI1;
BbM = BbI2./BbI1;
%%%%%%计算影响系数
Cbr = sum(sum(BrM))/sum(sum(BbM));
Cbg = sum(sum(BgM))/sum(sum(BbM));
%%清理内存
clear R BbI1 BbI2 BbM BlFr1 BlFr1r BlFr1g BlFr1b
clear BlFr2 BlFr2r BlFr2g BlFr2b BlFr3 BlFr3r BlFr3g BlFr3b
clear BgI1 BgI2 BgM BrI1 BrI2 BrM a fName filename pathname i
%%%%%%%%%以下用来读取一幅三个通道上分别编码的彩色条纹图
[filename,pathname] = uigetfile('*.bmp','打开彩色正弦编码参考面图......');
fName = strcat(pathname,filename);
RGBFr = double(imread(fName));
%%%%%%%%%%
[filename,pathname] = uigetfile('*.bmp','打开彩色正弦编码投射物体图......');
fName = strcat(pathname,filename);
RGBFrO = double(imread(fName));
%%%%通道信息分离
RGBFrR = RGBFr(:,:,1);
RGBFrG = RGBFr(:,:,2);
RGBFrB = RGBFr(:,:,3);
%%%%%
RGBFrRO = RGBFrO(:,:,1);
RGBFrGO = RGBFrO(:,:,2);
RGBFrBO = RGBFrO(:,:,3);
%%%%%
CompsRGBFrR = (RGBFrR - RGBFrG.*Cgr - RGBFrB.*Cbr)./(1 - Cgr - Cbr);
CompsRGBFrG = (RGBFrG - RGBFrR.*Crg - RGBFrB.*Cbg)./(1 - Crg - Cbg);
CompsRGBFrB = (RGBFrB - RGBFrR.*Crb - RGBFrG.*Cgb)./(1 - Crg - Cgb);
%%%%%
CompsRGBFrRO = (RGBFrRO - RGBFrGO.*Cgr - RGBFrBO.*Cbr)./(1 - Cgr - Cbr);
CompsRGBFrGO = (RGBFrGO - RGBFrRO.*Crg - RGBFrBO.*Cbg)./(1 - Crg - Cbg);
CompsRGBFrBO = (RGBFrBO - RGBFrRO.*Crb - RGBFrGO.*Cgb)./(1 - Crg - Cgb);
%%%%%归一化
maR = max(max(CompsRGBFrR));
miR = min(min(CompsRGBFrR));
CReFr = ((CompsRGBFrR-miR).*255)./(maR - miR);
%%%%
clear maR miR
%%%%
maRO = max(max(CompsRGBFrRO));
miRO = min(min(CompsRGBFrRO));
CReFrO = ((CompsRGBFrRO-miRO).*255)./(maRO - miRO);
%%%%
clear miRO maRO
%%%%
maG = max(max(CompsRGBFrG));
miG = min(min(CompsRGBFrG));
CGrFr = ((CompsRGBFrG-miG).*255)./(maG - miG);
%%%%
clear maG miG
%%%%
maGO = max(max(CompsRGBFrGO));
miGO = min(min(CompsRGBFrGO));
CGrFrO = ((CompsRGBFrGO-miGO).*255)./(maGO - miGO);
%%%%
clear maGO miGO
%%%%
maB = max(max(CompsRGBFrB));
miB = min(min(CompsRGBFrB));
CBlFr = ((CompsRGBFrB-miB).*255)./(maB - miB);
%%%%
clear maB miB
%%%%
maBO = max(max(CompsRGBFrBO));
miBO = min(min(CompsRGBFrBO));
CBlFrO = ((CompsRGBFrBO-miBO).*255)./(maBO - miBO);
%%%%%
clear maBO miBO
%%%%%%低通滤波消除噪声
w = gausswin(9)*gausswin(3)';
RFr = imfilter(CReFr,w,'circular');
GFr = imfilter(CGrFr,w,'circular');
BFr = imfilter(CBlFr,w,'circular');
%%%%%%%
RFrO = imfilter(CReFrO,w,'circular');
GFrO = imfilter(CGrFrO,w,'circular');
BFrO = imfilter(CBlFrO,w,'circular');
%%%%以下部分为相位展开部分
%计算物的反正切
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
g01 = sqrt(3).*(RFrO - BFrO);
g02 = 2.*GFrO - (RFrO + BFrO);
ObjectWrapPhai = atan2(g01,(g02+eps));
%
g1 = sqrt(3).*(RFr - BFr);
g2 = 2.*GFr - (RFr + BFr);
ReferenceWrapPhai = atan2(g1,(g2+eps));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%展相位
[Row,Column] = size(ReferenceWrapPhai);
% mask = ones(Row,Column);
[filename,pathname] = uigetfile('*.bmp','打开模板图象......');
fName = strcat(pathname,filename);
mask = double(imread(fName));
maa = max(max(mask));
mask = mask./maa;
ReUnwrapPhai = zlf_dunwrap(ReferenceWrapPhai,mask,[Row/2+35,Column/2-35]);
%%%
[Row,Column] = size(ObjectWrapPhai);
mask = ones(Row,Column);
ObUnwrapPhai = zlf_dunwrap(ObjectWrapPhai,mask,[Row/2,Column/2]);
%%%%
Phai = ObUnwrapPhai - ReUnwrapPhai;
mesh(Phai)
clear filename pathname fName RGBFr RGBFrO RGBFrR RGBFrG RGBFrB RGBFrRO RGBFrGO RGBFrBO
clear CompsRGBFrR CompsRGBFrG CompsRGBFrB CompsRGBFrRO CompsRGBFrGO CompsRGBFrBO
clear RFr GFr BFr RFrO GFrO BFrO g01 g02 g1 g2 ObjectWrapPhai ReferenceWrapPhai
clear Row Column mask CReFr CGrFr BlFr CReFrO CGrFrO BlFrO maa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -