MATLAB图像处理(裁剪)

在进行深度学习时,可用于扩充图像库。

图像裁剪

matlab中的imcrop函数
I2=imcrop(I,[a b c d]);
对图像I进行裁剪,[a b c d]表示了一个区域,其中a是水平方向的坐标(从左往右),b是竖直方向上的坐标(从上到下),c是长,d是宽。

size():获取矩阵的行数和列数
1、s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素是矩阵的行数,第二个元素是矩阵的列数。
2、[r,c]=size(A),当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。
3、size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数。

代码:

clear all;
clc;
%取样图片函数
 Files=dir('E:\图片\*.jpg');
 N=length(Files);
 Names={};
for k = 1:N  
        B=imread(strcat('E:\图片\',num2str(k),'.jpg'));
        a=223;%裁剪宽度
        b=223;%裁剪长度
        c=5;%每张照片裁剪数量
        %size(第一个行数,第二个列数)
        X=size(B,1); %横向列数
        Y=size(B,2); %纵向列数|
        for j= 1:c
          y=randperm(X-223,1);
          x=randperm(Y-223,1);
%           x=unidrnd(X-150,1,1);%宽的随机数()
%           y=unidrnd(Y-150,1,1);%宽的随机数()
          
          C=imcrop(B,[x y a b]);%利用裁剪函数裁剪图像,其中,(a,b)表示裁剪后左上角像素在原图像中的位置;c表示裁剪后图像的宽,d表示裁剪后图像的高
          % 关于矩形区域[Xmin Ymin Width Height],Xmin是横向第Xmin个像素,Ymin是纵向第Ymin个像素;
          % B = imresize(B,0.5,'bilinear');
          A=k*1000+j;
          imwrite(C,strcat('E:\图片1\',num2str(A),'.jpg'));% 保存帧
        end
end

遇到的问题

1、图像库没裁剪完
原因:因为遇到了长度或宽度小于224的图像(就程序中使用的数值而言)。
解决方法:采用图像插值生产高分辨率图像。或者进行图像缩放
在MATLAB中,interp2函数用于对图像进行插值处理。

  • 13
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值