最近博主在做一个新的项目,是一个缺陷识别的图像处理,需要用到深度学习进行训练。第一步就是制作训练集。训练的内容就是一个个小图像,需要首先把一个大图片分割成指定尺寸的小图像。博主使用Matlab进行了图像的分割,比较简洁。

本着涉密不上网,上网不涉密的“第二校训”,所以拿来测试的是在网上随便找的一张图片,也就是下面的这个图片进行分割:

用来测试的图片

为了方便,这里就选择了一张图片,代码写的是可以批量进行若干张图片的。

Matlab代码

% 获取原始图像集
clc;clear;close all;
img_name=dir(['E:\Blog1\' '*.png']);     % 获取Image Save文件夹下所有.png格式的图像
filename={img_name.name}';                    % 获取结构体img_name的name数据,元胞类型
f=repmat("a",16,1);                           % 初始化字符串矩阵,16是图像数量
Num=length(filename);                         % 图像个数
for i=1:Num
    f{i}=filename{i};                         % 把元胞转为字符串
end

% 逐个读取原始图像
path1='E:\Blog1\';                     % 原始图像路径
w=200;                                      % 输出的图片大小,w * w,这里切割成60*60的小图片
C=zeros(w,w);                               % w*w的空矩阵

for i=1:Num                   
    name=f{i};                              % 图像名
    path=strcat(path1,name);                % 路径+图像名
    I1=imread(path);                        % 读取原始图片
    I2=imresize(I1,[1000,1000]);            % 变换到指定的大小,建议和原图保持一致或者等倍放大缩小
    [r,c]=size(I2);                         % 行数和列数
    for m=1:r/w                          
        for n=1:c/w
            label=1;   
            C=I2((m-1)*w+1:m*w,(n-1)*w+1:n*w);      % 逐个遍历w*w的图像
            [pathstr,Name,suffix]=fileparts(filename{i});   % 分割图像名
            imwrite(C,['E:\Blog1\',Name,'_',num2str(m),'_',num2str(n),'.jpg'])   
            % 图像保存名,原始名_m_n.jpg
            close all;
        end
    end
end

代码解释

代码的注释写的很清楚。

一定要首先创建相关的路径,不然可能会报错,说没有权限写入之类的错误。

但是为什么重复了三次呢?这是因为输入的是彩色图像,有RGB三层。一般做这种都是输入灰度图像,因为是演示,所以故意卖个关子。

RGB有三层


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/ImageSplitting.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 09 月 18 日
如果觉得我的文章对你有用,请随意赞赏