【光學(xué)】matlab實(shí)現(xiàn)光學(xué)解包裹及校正
【光學(xué)】matlab實(shí)現(xiàn)光學(xué)解包裹及校正
TT_Matlab
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,完整matlab代碼或者程序定制加qq1575304183。
1 簡介
2 部分代碼
function
varargout = Multi_GUI(varargin)
% 可使用guide查看各控件的句柄和回調(diào)函數(shù)位置;
% GUIDE v2.
5
;
% 初始化代碼,請(qǐng)勿編輯
gui_Singleton =
1
;
gui_State = struct(
’gui_Name’
, mfilename, ...
’gui_Singleton’
, gui_Singleton, ...
’gui_OpeningFcn’
, @Multi_GUI_OpeningFcn, ...
’gui_OutputFcn’
, @Multi_GUI_OutputFcn, ...
’gui_LayoutFcn’
, [] , ...
’gui_Callback’
, []);
if
nargin && ischar(varargin{
1
}) %%判斷輸入變量個(gè)數(shù)及是否為字符組
gui_State.gui_Callback = str2func(varargin{
1
});%%函數(shù)句柄
end
if
nargout %%函數(shù)輸出參數(shù)數(shù)目
[varargout{
1
:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function
Multi_GUI_OpeningFcn(hObject,~,handles,varargin)
set(groot,
’defaultimageUserData’
,
0
);
set(groot,
’defaultlineUserData’
,
0
);
handles.output = hObject;
guidata(hObject, handles);
function
varargout = Multi_GUI_OutputFcn(~,~,handles)
varargout{
1
} = handles.output;
%曲線放大函數(shù)
function
p_ButtonDownFcn(hObject,~)
if
strcmp(get(gcf,
’SelectionType’
),
’open’
)&&hObject.Children.UserData==
0
%%strcmp比較兩個(gè)字符串,同
1
異
0
; gcf返回當(dāng)前figure;判斷是否是雙擊 ;
hObject.Children.UserData=
1
;
S=get(
0
,
’screensize’
);
F_z=figure(
’InnerPosition’
,[S(
3
)/
20
,S(
4
)/
15
,S(
3
)*
0.9
,S(
4
)*
0.9
],
’Toolbar’
,
’none’
,
’Menubar’
,
’none’
,
’NumberTitle’
,
’Off’
,
’Name’
,
’放大視圖’
);
p_f=hObject.Position;
P_f=hObject.Parent;
hObject.Parent=F_z;
set(gca,
’Position’
,[
0.05
,
0.05
,
0.9
,
0.9
]);
F_z.DeleteFcn={@pZoom_DeleteFcn,hObject,P_f,p_f};
end
%放大窗口刪除函數(shù)(曲線)
function
pZoom_DeleteFcn(~,~,a,P_f,p_f)
a.Parent=P_f;
set(a,
’Position’
,p_f);
a.Children.UserData=
0
;
%云圖繪制函數(shù)
function
nephogram(ax,
data
,CLim,target,unit,biaozhi)%(云圖坐標(biāo)區(qū),云圖數(shù)據(jù),顏色范圍矩陣,標(biāo)題,曲線坐標(biāo)區(qū))
image(ax,
data
,
’CDataMapping’
,
’scaled’
,
’ButtonDownFcn’
,{@a_Callback,target,unit,biaozhi});%顯示AoP云圖 直接和縮放顏色數(shù)據(jù)映射 scaled為默認(rèn)
set(ax,
’DataAspectRatioMode’
,
’manual’
,
’DataAspectRatio’
,[
1
1
1
]); %設(shè)置各個(gè)坐標(biāo)軸數(shù)據(jù)值的相對(duì)比例
colormap(ax,jet);%色圖矩陣默認(rèn)
colorbar(ax);%差值填色圖標(biāo)尺
axis(ax,
’off’
);%坐標(biāo)軸無上下限
caxis(ax,CLim);%設(shè)置顏色條數(shù)值上下限
%單擊圖片后顯示沿截線的分布的回調(diào)函數(shù)
function
a_Callback(hObject,~,ax,Unit,biaozhi)%ax為曲線所在坐標(biāo)區(qū),Unit為縱軸單位
hObject.HandleVisibility=
’off’
; %控件的句柄可訪問性為不可訪問
cla(hObject.Parent);%清除已有提示線
hObject.HandleVisibility=
’on’
; %可以訪問控件的句柄
if
strcmp(get(gcf,
’SelectionType’
),
’open’
)&&hObject.UserData==
0
%若為雙擊且尚未打開放大窗口,則放大該圖片
hObject.UserData=
1
;
S=get(
0
,
’screensize’
); %屏幕尺寸
C0=hObject.CData; %所畫圖像中用到的數(shù)據(jù)
if
any(~biaozhi(:)) %any判斷向量中是否存在非零元素,biaozhi中是否有
0
X=find(sum(
1
-biaozhi)~=
0
); %列求和,生成行向量
Y=find(sum(
1
-biaozhi,
2
)~=
0
); %行求和,生成列向量
hObject.Parent.XLim=[
0.5
length(X)+
0.5
]; %
hObject.Parent.YLim=[
0.5
length(Y)+
0.5
]; %
hObject.CData=C0(Y(
1
):Y(
end
),X(
1
):X(
end
)); %
end
[h,w]=size(hObject.CData); %h行數(shù)w列數(shù)
cm=colormap(hObject.Parent);
F_z=figure(
’Visible’
,
’off’
,
’InnerPosition’
,[S(
3
)/
20
,S(
4
)/
15
,S(
3
)*
0.9
,S(
4
)*
0.9
],
’Colormap’
,cm,
’Toolbar’
,
’none’
,
’Menubar’
,
’none’
,
’NumberTitle’
,
’Off’
,
’Name’
,
’放大視圖’
);
ca=copyobj(hObject.Parent,F_z); %復(fù)制圖形對(duì)象及其后代,復(fù)制hObject標(biāo)識(shí)的一個(gè)或多個(gè)圖形對(duì)象并返回新對(duì)象句柄或新對(duì)象數(shù)組。新圖形對(duì)象是F_z指定的圖形對(duì)象的子級(jí)
set(gca,
’Position’
,[
0.025
,
0.025
,
0.95
,
0.95
]);
ca.Children.ButtonDownFcn={@a_Callback,ax,Unit,biaozhi};
ca.Children.UserData=
1
;
c=colorbar(ca);
ca.YAxis.Label.Units=
’pixels’
;
F_z.InnerPosition(
3
)=c.Position(
3
)*F_z.InnerPosition(
3
)+w/h*F_z.InnerPosition(
4
)+ca.TickLength(
2
)*F_z.InnerPosition(
4
)-ca.YAxis.Label.Extent(
1
);
ca.YAxis.Label.Units=
’data’
;
F_z.Visible=
’on’
;
F_z.DeleteFcn={@Copy_DeleteFcn,hObject,C0};
else
if
~isempty(ax.Children) %判斷是否為非空
mark=ax.Children.UserData;
else
mark=
0
;
function
popupmenu2_Callback(hObject,~,handles) %
#ok<DEFNU>
switch
get(hObject,
’Value’
)
case
1
if
isfield(handles,
’p1’
)
nephogram(handles.axes3,handles.p1,[min(handles.p1(handles.p1~=
0
)),max(handles.p1(handles.p1~=
0
))],handles.axes4,[],handles.biaozhi)%(云圖坐標(biāo)區(qū),云圖數(shù)據(jù),顏色范圍矩陣,標(biāo)題,曲線坐標(biāo)區(qū))
end
case
2
if
isfield(handles,
’p2’
)
nephogram(handles.axes3,handles.p2,[min(handles.p2(handles.p2~=
0
)),max(handles.p2(handles.p2~=
0
))],handles.axes4,[],handles.biaozhi)%(云圖坐標(biāo)區(qū),云圖數(shù)據(jù),顏色范圍矩陣,標(biāo)題,曲線坐標(biāo)區(qū))
end
end
function
pushbutton_save_Callback(~,~,handles) %
#ok<DEFNU>
path=uigetdir([getenv(
’userprofile’
),
’desktop’
],
’選擇φ1和φ2數(shù)據(jù)的保存路徑’
);
if
path~=
0
dlmwrite([path,
’phi1.txt’
],handles.p1);
dlmwrite([path,
’phi2.txt’
],handles.p2);
end
3 仿真結(jié)果
4 參考文獻(xiàn)
[1]王永紅, 陳維杰, 鐘詩民,等. 相位解包裹技術(shù)及應(yīng)用研究進(jìn)展[J]. 測控技術(shù), 2018, 037(012):1-7,16.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
-
2023年各省最新電價(jià)一覽!8省中午執(zhí)行谷段電價(jià)! 2023-01-03
-
PPT導(dǎo)出高分辨率圖片的四種方法 2022-09-22
-
全國消防救援總隊(duì)主官及簡歷(2023.2) 2023-02-10
-
盤點(diǎn) l 中國石油大慶油田現(xiàn)任領(lǐng)導(dǎo)班子 2023-02-28
-
我們的前輩!歷屆全國工程勘察設(shè)計(jì)大師完整名單! 2022-11-18
-
關(guān)于某送變電公司“4·22”人身死亡事故的快報(bào) 2022-04-26
