- 1.使用MATLAB编辑器窗口进行图像处理
- 2.使用MATLAB GUI进行图像处理
- 创建用于图像处理的MATLAB图形用户界面
- 用于图像处理的MATLAB GUI代码
- 运行MATLAB GUI代码进行图像处理
想象一下,将您的相机指向某个对象,然后相机会告诉您该对象的名称,是的,Android智能手机中的 Google镜头 正在使用“图像处理”来做同样的事情。这给计算机 视觉 检测和识别的东西,并采取相应的行动。图像处理具有许多应用程序,例如人脸检测与识别,拇指印象,增强现实,OCR,条形码扫描等等。有许多可用于图像处理的软件,其中最适合使用MATLAB。
MATLAB可以执行许多高级图像处理操作,但是对于MATLAB中的图像处理入门,我们将在此介绍一些基本操作,例如RGB到Gray,旋转图像,二进制转换等。您可以进一步制作自动程序来去除噪声,图像为了清楚起见,请使用本教程中介绍的功能进行过滤。
在继续进行下去之前,如果您不熟悉MATLAB,可以查看我们以前的MATLAB教程,以更好地了解这些知识:
- MATLAB入门:快速入门
- 将Arduino与MATLAB接口-闪烁LED
- 使用MATLAB和Arduino的直流电动机控制
- 使用MATLAB和Arduino的步进电机控制
- 如何使用MATLAB绘制实时温度曲线图
与往常一样,在MATLAB中,有两种方法可以执行任何图像处理算法,一种方法是直接在编辑器/命令窗口中输入命令,另一种方法是为其创建GUI。在这里,我们将向您展示在MATLAB中执行图像处理基本操作的两种方法。
1.使用MATLAB编辑器窗口进行图像处理
现在,我们将在编辑器窗口中编写用于执行图像处理的一些基本操作的代码。要熟悉MATLAB中使用的所有基本术语,请点击链接。将以下代码复制并粘贴到编辑器窗口中,
a =未读('F:\电路摘要\使用matlab \ camerman.jpg进行图像处理');子图(2,3,1); 展示(a); b = rgb2gray(a); 子图(2,3,2); imshow(b); c = im2bw(a); 子图(2,3,3); imshow(c); d =不可调(b); 子图(2,3,4); imshow(d); e = a; e = rgb2gray(e); 子图(2,3,5); imhist(e); imfinfo('F:\电路摘要\使用matlab的图像处理\ beard-man.jpg') = size(a) %colormap('spring')
在变量“ a”中,我们使用命令 imread('filename') 导入图像,然后使用 子图(行,列,位置) 绘制“ 2”行和“ 3” 列, 并在位置“上显示导入的图像” 1'。为了显示图像,我们使用命令 imshow('filename') 。
以下是对上传的图片执行一些基本处理的一些命令:
- 在变量“ b”中,我们使用命令 rgb2gray('filename') 将RGB图像转换为灰度强度图像,并将其显示在位置“ 2”上。
- 在变量'c'中,我们将图像转换为二进制图像,或者您可以使用命令 im2bw('filename') 并以'0'(黑色)和'1'(白色)的 格式 显示在位置“ 3”。
- 在变量“ d”中,我们通过使用命令 imadjust('filename') 调整或映射灰度图像强度值,并将其显示在位置“ 4”上的图中。
- 在变量“ e”中,我们使用命令 imhist('filename') 绘制灰度图像的直方图,并将其显示在位置“ 5”上。为了绘制直方图,您始终必须将图像转换为灰度,然后才能看到该图形文件的直方图。
- Imfinfo('带有位置的文件名') 命令用于显示有关图形文件的信息。
- = size('filename') 命令用于显示特定图形文件的大小和颜色平面。
- colormap('spring') 用于更改图形文件的颜色图的类型。在这里,在我的代码中,我将此命令设置为注释,但是您可以通过删除百分比符号来使用它。MATLAB中有许多类型的颜色,例如喷射,HSV,热,冷,夏天,秋天,冬天,灰色,骨色,铜色,粉红色,线条和春天。
像这些一样,MATLAB中有许多命令可用于执行不同的任务,您可以通过以下链接检查MATLAB中的图像处理功能。
2.使用MATLAB GUI进行图像处理
创建用于图像处理的MATLAB图形用户界面
要构建用于图像处理的GUI(图形用户界面),请在 命令窗口中 键入以下命令以启动GUI 。
指南
将会打开一个弹出窗口,然后选择新的 空白GUI ,如下图所示,
现在我们必须选择按钮数量(每个按钮将执行不同的任务)和一个轴来显示图像。
要调整按钮或轴的大小或更改按钮或轴的形状,只需单击它,就可以拖动按钮的各个角。通过双击其中任何一个,您将能够更改该特定按钮的颜色,字符串,标签和其他选项。定制后,它看起来像这样
您可以根据需要自定义按钮。现在,当您保存此代码时,将在MATLAB的“ 编辑器”窗口 中生成一个代码。编辑生成的代码以为不同的按钮设置任务。下面我们编辑了MATLAB代码。
用于图像处理的MATLAB GUI代码
在该项目的最后给出了使用MATLAB GUI进行图像处理的完整MATLAB代码。此外,我们在此处包括要下载的GUI文件(.fig)和代码文件(.m),您可以使用它们根据需要自定义按钮或轴的大小。我们已经编辑了生成的代码,如下所述。
在 “ uploadimage” 功能中,复制并粘贴以下代码以从PC插入文件。此处,命令 uigetfile('image extension type') 用于在MATLAB GUI中导入图像。使用命令 imread() 读取该文件,然后使用命令 imshow() 在 axis1上 使用 axes(handles.axes1) 显示该文件。现在,使用命令 setappdata() 将变量存储在GUI中,以便该GUI的一部分可以访问该变量,而另一部分则可以访问。
a = uigetfile('。jpg') a = imread(a); axes(handles.axes1); imshow(a); setappdata (0,'a',a)
现在,在每个函数中,您将看到命令 getappdata() ,该命令用于检索使用 setappdata ()在GUI中存储的数据 。
这里我们将解释图像处理中的八个常用功能
序号 |
命令 |
按钮名称 |
要执行的任务 |
1。 |
uigetfile() |
上传图片 |
单击以从磁盘导入图像 |
2。 |
rgb2gray() |
RGB到灰色 |
单击以将RGB图像转换为灰度 |
3。 |
im2bw() |
转换为二进制图像 |
单击以将图像转换为二进制 |
4。 |
-- |
重启 |
单击以将图像重置为原始图像 |
5, |
imhist() |
直方图 |
单击以查看图像的直方图 |
6。 |
imcomplement() |
补图 |
点击查看补图 |
7。 |
边缘(文件名,方法) |
边缘检测 |
单击以检测图像中的边缘 |
8。 |
旋转(文件名,角度) |
顺时针旋转 |
单击以将图像按顺时针方向旋转 |
9。 |
旋转(文件名,角度) |
逆时针旋转 |
单击以将图像旋转到逆时针方向 |
1. 将RGB图像转换为灰度
在 “ rgb2gray” 功能中,复制并粘贴以下代码,以使用命令 rgb2gray() 将RGB图像转换为灰度图像。
a = getappdata(0,'a'); agray = rgb2gray(a); axes(handles.axes1); imshow(灰色);
2. 转换为二进制图像
在 “ im2bw” 函数中,复制并粘贴以下代码以将图像转换为二进制图像,或者可以使用命令 im2bw() 以“ 0”(黑色)和“ 1”(白色)的 格式进行声明 。
a = getappdata(0,'a'); abw = im2bw(a); axes(handles.axes1); imshow(abw);
3. 重置为原始图像
在 “重置” 功能中,复制并粘贴以下代码,以将编辑后的图像重置为原始图像。
a = getappdata(0,'a'); axes(handles.axes1); imshow(a);
4. 绘制图像直方图
在 “直方图” 功能中,复制并粘贴以下代码,以使用命令 imhist('filename') 绘制灰度图像的直方图,并将其显示在 axis1上 。为了绘制直方图,您始终必须将图像转换为灰度,然后才能看到该图形文件的直方图。
a = getappdata(0,'a'); ahist = a; ahist = rgb2gray(ahist ); axes(handles.axes1); imhist (ahist);
5. 转换为补图
在 “ complementimage” 功能中,复制并粘贴以下代码,以使用命令 imcomplement() 查看插入的图形文件的补码。
a = getappdata(0,'a'); acomp = a; acomp = imcomplement(acomp); axes(handles.axes1); imshow(acomp);
6. 使用Canny方法进行边缘检测
在 'edge' 功能中,复制并粘贴以下代码,以使用命令 edge('filename','method') 检测并找到灰度图像中的 边缘 。在 方法 的位置,您可以在 Canny,Prewitt 和 montage 这三者中进行选择。我们正在使用 Canny 方法进行边缘检测。另外,您不能直接从原始图像中检测边缘,首先必须将其转换为灰度,然后才能检测边缘。
a = getappdata(0,'a'); aedge = a; aedge = rgb2gray(aedge ); aedge = edge(aedge ,'Canny')' axes(handles.axes1); imshow (aedge);
7. 顺时针旋转图像
在 “顺时针” 功能中,复制并粘贴以下代码,以使用命令 imrotate(filename,'angle') 沿顺时针方向旋转图像
a = getappdata(0,'a'); aclock = a; aclock = imrotate(aclock,270); axes(handles.axes1); imshow(aclock);
8. 逆时针旋转图像
在 “逆时针” 功能中,复制并粘贴以下代码,以使用命令 imrotate(filename,'angle') 沿逆时针方向旋转图像。
a = getappdata(0,'a'); aclock = a; aclock = imrotate(aclock,90); axes(handles.axes1); imshow(aclock);
运行MATLAB GUI代码进行图像处理
现在,单击“运行”按钮以运行.m文件中的已编辑代码
MATLAB可能需要几秒钟的时间做出响应,在MATLAB在左下角显示繁忙消息之前,请不要单击任何GUI按钮,如下所示,
一切准备就绪后,单击“上传图像”按钮从PC导入图像。现在,您将可以通过相应地单击任意按钮来转换或旋转图像。下表将显示您单击任何特定按钮时正在执行的任务:
单击每个按钮的结果将显示如下,
下面的视频演示了每个按钮的完整功能。
您甚至可以使用图像处理工具箱(可以从MATHWORKS官方网站购买)来进行高级图像处理,下面列出了一些高级操作:
- 几何运算
- 块操作
- 线性滤波和滤波器设计
- 变身
- 图像分析与增强
- 二进制图像操作