資源簡介
圖像預處理MATLAB代碼(包括圖像去孔洞,尺寸歸一化等)
代碼片段和文件信息
%This?program?is?to?motion?segmentation?and?following
clc;
clear;
tic;
%對訓練樣本進行預處理.完成消除孔洞,大小規范化和最后尺寸歸一化處理
%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%remove?hole消除孔洞???
?cd(‘C:\Users\Administrator\Desktop\整合代碼\步態庫0度\實驗樣本‘);
?Allpeople=dir(‘.‘);%20個人的目錄
for?xPerson=3:length(Allpeople)
????cd(Allpeople(xPerson).name);%每個人的目錄
????allImages=dir(‘.‘);%獲取所有png圖像?
???for?xImage=3:length(allImages)%從1到所有圖像
??????diff=imread(allImages(xImage).name);%讀進圖像
?????newdiff?=?bwmorph(diff‘erode‘);%對二值圖像進行數學形態學運算,erode使用結構元素ones(3)對圖像進行腐蝕運算
?????newdiff?=?bwmorph(newdiff‘dilate‘2);%dilate使用結構元素ones(3)對圖像進行膨脹運算
?
?????cd(‘C:\Users\Administrator\Desktop\整合代碼\源碼\試驗路徑\二值輪廓像‘);
?????%創建以當前人命名的文件夾
????XPerson=Allpeople(xPerson).name;
????if?exist(XPerson)==0??????????????%判斷是否已經存在名為XPerson的文件夾
????mkdir?(XPerson)?;????????%在當前目錄下,創建名為XPerson的文件件
????end
????cd?(XPerson);%進入剛才創建的文件夾
?????I=num2str((xImage-2)‘%03d‘);%把1變成0012變成002....
?????imwrite(newdiffstrcat(num2str(I)‘.png‘));%這樣生成的話最后讀取時按高位讀的,會出錯
?????cd(‘C:\Users\Administrator\Desktop\整合代碼\步態庫0度\實驗樣本‘);
?????cd(Allpeople(xPerson).name);%返回每個人的目錄
???end
???cd(‘C:\Users\Administrator\Desktop\整合代碼\步態庫0度\實驗樣本‘);%返回所有人在的大目錄
end
disp(‘remove?hole?time‘);
toc;
clear;
tic;
%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%歸一化處理,生成以人的輪廓邊界為邊界的二值圖像
cd(‘C:\Users\Administrator\Desktop\整合代碼\源碼\試驗路徑\二值輪廓像‘);
Allpeople=dir(‘.‘);%20個人的目錄
length(Allpeople);
for?xPerson=3:length(Allpeople)
????cd(Allpeople(xPerson).name);%每個人的目錄
????allImages=dir(‘.‘);%獲取所有png圖像?
???for?xImage=3:length(allImages)%從1到所有圖像?????????
????????????rawPIC=imread(allImages(xImage).name);%讀進圖像
????????????picSize=size(rawPIC);%picSize=圖像的維數?:行X列,兩個數?
%?????????????figure(1);subplot(121);imshow(rawPIC);title(‘原輪廓圖像‘);
?????%找列的左邊界?
????????????x=1;
????????????y=1;
????????????while(rawPIC(xy)==0)%0是黑色,1是白色,所以當時為0時即為背景區
????????????????if?x>=picSize(1)
????????????????????x=0;
????????????????????y=y+1;
????????????????end
????????????????x=x+1;
????????????end
????????????leftx=y;%找到left點即退出
?????%找列的右邊界
????????????x=1;
????????????y=picSize(2);
????????????while(rawPIC(xy)==0)
????????????????if?x>=picSize(1)
????????????????????x=0;
????????????????????y=y-1;
????????????????end
????????????x=x+1;
????????????end
????????????rightx=y;%找到bottom點即退出
??????%找行的下邊界?
????????????y=1;
????????????x=1;
????????????while(rawPIC(xy)==0)%0是黑色,1是白色,所以當時為0時即為背景區
????????????????if?y>=picSize(2)
????????????????????y=0;
????????????????????x=x+1;
????????????????end
????????????????y=y+1;
????????????end
????????????boty=x;%找到top點即退出
???????%找行的上邊界
????????????y=1;
????????????x=picSize(1);
????????????while(rawPIC(xy)==0)
????????????????if?y>=picSize(2)
????????????????????y=0;
????????????????????x=x-1;
????????????????end
????????????y=y+1;
????????????end
???????????topy=x;%找到bottom點即退出
????????????
????????????picResize=rawPIC(boty:topyleftx:rightx);%重構后的圖像
???????????
- 上一篇:信號包絡提取
- 下一篇:偏微分圖像處理MATLAB程序
評論
共有 條評論