• 大小: 9KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: 图像处理  

资源简介

图像预处理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);%重构后的图像
           

评论

共有 条评论