matla图像处理基本操作

来源:互联网 发布:java 代码 版权保护 编辑:程序博客网 时间:2024/05/09 07:32

今天主要总结一下matlab图形,图像方面的的基础知识。

首先对比一下matlab和OpenCV:

matlab的矩阵运算很快,实现的算法可以迅速的仿真,这样方便算法的确定,但是工程较大时,用起来不太方便,不易管理,另外他是商业软件,不是免费的。

OpenCV,这几年发展速度非常快,已经到OpenCV3版本了,图像的基本算法都实现,比起matlab而言,需要有C/C++基础,适合于大型工程,而且是开源免费。使用起来比matlab稍微复杂。

共同点:两者的算法基础基本相同,算法互通

1.matlab图形对象

matlab的图像对象思想是面向对象,即一个图像就是一个图形对象,可以设置各种属性,图形对象的从属关系如下:


其中,root对象是根对象,只能有一个。其他的对象都从属于根对象。

1.1figure对象的格式有两种,第一种: 窗口句柄 = figure('属性1',属性值1,,’属性2‘,属性值2,...),或者figure(窗口句柄),例子如下:

h = figure('color',[1 1 1],'position',[100 100 300 300]);figure(h);%如果句柄h不存在,则用h初始化一个默认的窗口。
上面的提到的’属性‘有很多,这里不一一举例了,需要的时候再查阅。

注意:如果没有在plot或者imshow时,没有figure对象,则系统默认创建一个figure,如果有多个figure,则总有一个是’当前figure对象‘.

1.2 uicontrol对象

就是控制框对象(GUI),比如按钮,文本框,这个和MFC,QT的界面类似,这一不细说了。下面举一个例子,看了就明白:

figure(h);%如果句柄h不存在,则用h初始化一个默认的窗口。%uicontrol控制对象,格式:控制窗句柄 = uicontrol(父对象句柄,‘属性1’,属性值1,‘属性2’,...)radio = uicontrol(h,'style','radio','position',[2 2 30 30]);uicontrol(h,'style','slide','position',[50.2,50.2,100.0,100.0]);%matlab默认坐标为左下角
1.3 uimenu对象

也就是菜单栏,格式和uiconstrol类似,属性名称需要使用的时候再查。
1.4 axes对象

即坐标轴对象,他定义一个区域,所有的子对象都限制在这个区域,坐标轴对象是figure的子对象,同时也是image图像、light对象、line对象的父对象。同figure一样,如果没有指定axes对象,则默认创建一个,如果有多个,则总有一个是’当前‘坐标轴。可以有set()函数来设定各种属性。

1.5句柄对象那个的访问,设置等

set,get,findobj,delete(),copyobj()等,set()的格式:

set(对象句柄,‘属性1’,属性值1,‘属性2’,...)

2 matlab图形绘制

基本函数:常用的函数有plot(x1,y1),plot3(c1,y1,z1),对数坐标绘制,半对数坐标绘制,等

条形图绘制:bar(x,y)绘制二维条形图,bar3()三维条形图,还可以水平绘制

柱状图的绘制:hist()函数等,

饼图的绘制:pie()函数

离散图形的绘制:stem()函数

方向和矢量图绘制:compass(),feather(),quiver()等

轮廓图的绘制:contour()绘制

动画的绘制:getframe()函数

以上的函数都是matlab函数的一部分,matlab能完成很多的绘图。感叹!!!


3.matlab中的图像

这一部分是和我专业最相关的部分,以前经常用OpenCV做计算及视觉的开发,在openCV2.0以后,有了C++的函数接口,这些OpenCV的函数接口越来越像matlab的风格

,比如cv::imread(),就和matlab的imread类似,其他的也类似,这样,matlab的做一下基本的了解就可以了,因为原理是一样的,只是函数的名字和使用方法有一点不同。下面的基本知识尽量和OpenCV对比着介绍:

图像的读取,保存,显示:

x = imread('1.png');x(3,3,:)%像素(3,3)的颜色访问:‘:’表示所有通道的颜色。y = rgb2gray(x);%还有其他索引图等之间的转化,以及颜色空间的转化%imshow(y);imwrite(y,'2.jpg');%imshow 2.jpginfo = imfinfo('1.png');%文件本身的信息

图像的多帧阵列,例子如下:

x = imread('1.png');y = imread('2.png');z = imread('3.png');a = cat(2,x,y,z);%imshow(a(:,:,1))%显示第一帧montage(a);%多帧显示,结果是图像水平排列在一起

动画:讲图像表示为索引关系,然后图像数据叠加,循环显示图像阵列,相关联的函数为:immovie().
纹理映射,例子如下:

I = imread('1.png');[x,y,z] = sphere;%定义球warp(x,y,z,I);%图像映射到球上,用的是双线性渐变算法
拓展:可以用于其他的纹理映射。

matlab可以在一个窗口显示多幅图像,设计的函数为subimage();

4.图像的几何操作和区域处理

插值:和OpenCV一样,有三种插值方法。主要用在图像的缩放和变换的相关函数。

图像缩放函数:imresize(),函数中要指定插值方法。

图像的旋转:imrotate()。

图像的剪切:imcrop(),OpenCV中是控制ROI区域来实现的。

图像区域的处理:可以选取任意形状的区域,用mask来标识,和openCV一样,但是OpenCV需要自己编写来实现mask,matlab直接用函数就可以形成。

多边形选择区域:roipoly(),OpenCV中没有这个功能。灰度选择区域等,滤波等,matlab直接就能得到区域的mask,确实很方便啊。

5.图像变换

算法和OpenCV一样,主要是频域的傅里叶变换,此处略

radon变换:类似于OpenCV中的Hough变换,可以检测图像中的直线等。原理:图像投影到某一个方向上的积分和。函数为randow(image,theta);theta为旋转角度;

6.图像增强,腐蚀膨胀

原理和OpenCV一样,此处略

7.四叉树分解和图像分割(OpenCV没有)

主要用于图像分割:截图如下:


8.不均匀亮度的矫正

首先对背景亮度粗略估计(32x32的块),然后统计原始图像,与北京亮度做差,然后在调整原始图像的灰度级。主要函数为blkproc()


到此,matlab图像处理就不在介绍了,本文写的很简陋,可以当做自己的笔记吧,大家不要吐槽。

0 0