matlan图像处理(一)

    师兄给了个任务,让我用matlab处理图片。主要内容大概是,已有一个程序,能够把读入图片中的物体用box框出来。我要做的是用正方形把box所在区域抠出来,中心点不变,边长为box矩形的最长边h,加最长边h的1/16padding。简单说是把box框出的物体用最小外接正方形抠出来输出单个图片。一种格式是原始图片,一种格式是图片中含有box框框。另外在统计box长宽的数目做出直方图。
    任务不算复杂,但我没用过matlab,安装包都没有,做起来还是要花些时间,毕竟装个matlab 2014a破解版都要一两个小时了。

    重点说下我做图像处理时用的的几个函数。
    imread 读入图片后把数据保存为三维矩阵[m*n*z] m是原始图片的高,n为长,z为3,分别代表RGB的值。如I=imread('a.jpg');
    size函数能获得矩阵的大小。如[m n] = size(I); 这里的n为图片原始长度的3倍。为什么,因为I是三维矩阵呀,,我几次都忽略了这点,出了许多bug。最好写成[m n z] = size(I)。这样就不会出错了
    接下来对图像做什么处理,就直接去整这个三维矩阵就好了。
    imshow(I) 这样一句话,就能把三维图像矩阵显示到figure上了。在对三维矩阵一整处理后,不知道把图像变成什么样了,只需要imshow(I)一下,就能够看到了。
    如果你用了imshow之后看到的图像为白色,那恭喜你也和我一样中招了。
在matlab中,imshow处理的是 uint8类型的数据。范围是[0~1]。imread 也一样,读入的是uint8类型,为了保证精度,转换成了double类型存储了矩阵,范围是[0~255]。所以我们在对矩阵操作是,处理的都是double类型的数据。当要用到imshow时,要把double类型转换为uint8类型作为输入,才能正常显示图像。imwrite函数同理。
解决办法:

imshow(I/256);          %将图像矩阵转化到0-1之间

imshow(I,[]);              %自动调整数据的范围以便于显示

或者直接用im2uint8函数

我用的是第一种方法,其他还没试过。


再说下我对三维矩阵做了哪些处理。首先我把三维矩阵拆成了三个二维矩阵,方便处理。用的cat函数

        c1 = cat(2, I(:,:,1));
        c2 = cat(2, I(:,:,2));
        c3 = cat(2, I(:,:,3)); 
这样就有了三个矩阵,分别对应RGB的值。

然后我要在图中画一个框怎么做呢?
比如一个框框的坐标存在了bb一维四列数组中:
xmin = bb(1)
ymin = bb(2)
xmax = bb(3)
ymax = bb(4)

我在图片中相应的位置,画一个绿色的框:
        c1(bb(2), bb(1):bb(3)) = 0;
        c1(bb(4), bb(1):bb(3)) = 0;
        c1(bb(2):bb(4), bb(1)) = 0;
        c1(bb(2):bb(4), bb(3)) = 0;
        
        c2(bb(2), bb(1):bb(3)) = 255;
        c2(bb(4), bb(1):bb(3)) = 255;
        c2(bb(2):bb(4), bb(1)) = 255;
        c2(bb(2):bb(4), bb(3)) = 255;        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值