【限速标志识别】基于matlab GUI形态学限速标志识别【含Matlab源码 1142期】
一、简介
数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。
开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。
1 二值形态学
粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。式子表达为:
该式子表示用结构B腐蚀A,需要注意的是B中需要定义一个原点,【而B的移动的过程与卷积核移动的过程一致,同卷积核与图像有重叠之后再计算一样】当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重叠的区域,(也就是B中为1的元素位置上对应的A图像值全部也为1)则将输出图像对应的像元(x,y)赋值为1,否则赋值为0。
我们看一个演示图。
B依顺序在A上移动(和卷积核在图像上移动一样,然后在B的覆盖域上进行形态学运算),当其覆盖A的区域为[1,1;1,1]或者[1,0;1,1]时,(也就是B中‘1’是覆盖区域的子集)对应输出图像的位置才会为1。
2 膨胀
粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。
该式子表示用结构B膨胀A,将结构元素B的原点平移到图像像元(x,y)位置。如果B在图像像元(x,y)处与A的交集不为空(也就是B中为1的元素位置上对应A的图像值至少有一个为1),则输出图像对应的像元(x,y)赋值为1,否则赋值为0。
演示图为:
3 小结
也就是说无论腐蚀还是膨胀,都是把结构元素B像卷积操作那样,在图像上平移,结构元素B中的原点就相当于卷积核的核中心,结果也是存储在核中心对应位置的元素上。只不过腐蚀是B被完全包含在其所覆盖的区域,膨胀时B与其所覆盖的区域有交集即可。
4 灰度形态学
在讲述灰度值形态学之前,我们进行一个约定,即将结构元素B覆盖住的图像A的区域记为P(取Part之意)。
5 灰度形态学的腐蚀
那么灰度形态学中的腐蚀就是类似卷积的一种操作,用P减去结构元素B形成的小矩形,取其中最小值赋到对应原点的位置即可。
我们来看一个实例,进行加深对灰度形态学的理解。
假设我们有如下的图像A和结构元素B:
进行灰度形态学腐蚀的过程如下:
我们对输出图像的第一个元素的输出结果进行具体的展示,也就是原点对应的4的位置。输出图像其他的元素的值也都是这样得到的。我们会看到,B首先覆盖的区域就是被减数矩阵,然后在其差矩阵中求min(最小值)来作为原点对应位置的值。
灰度形态学的膨胀
根据上面对腐蚀的描述,我们对膨胀做出同样的描述,灰度形态学中的膨胀就是类似卷积的一种操作,用P加上B,然后取这个区域中的最大值赋值给结构元素B的原点所对应的位置。
这里也对输出图像第一个元素值的来历做个说明。
对上面矩阵的和求最大值就是6,所以把6赋值给结构元素原点所对应的位置。
6 小结
上面介绍了灰度形态学的概念,这里来说一说各自的用处。相比较于原图像,因为腐蚀的结果要使得各像元比之前变得更小,所以适用于去除高峰噪声。而灰度值膨胀的结果会使得各像元比之前的变得更大,所以适用于去除低谷噪声。
二、源代码
function varargout = Mat5_2(varargin)
% MAT5_2 MATLAB code for Mat5_2.fig
% MAT5_2, by itself, creates a new MAT5_2 or raises the existing
% singleton*.
%
% H = MAT5_2 returns the handle to a new MAT5_2 or the handle to
% the existing singleton*.
%
% MAT5_2('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MAT5_2.M with the given input arguments.
%
% MAT5_2('Property','Value',...) creates a new MAT5_2 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Mat5_2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Mat5_2_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Mat5_2
% Last Modified by GUIDE v2.5 21-Jul-2021 15:09:04
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Mat5_2_OpeningFcn, ...
'gui_OutputFcn', @Mat5_2_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Mat5_2 is made visible.
function Mat5_2_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Mat5_2 (see VARARGIN)
% Choose default command line output for Mat5_2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Mat5_2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Mat5_2_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)%载入图像
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global Image
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'.gif'},'选择图片');
str=[pathname filename];
Image1 = imread(str);
Image=Image1;
axes(handles.axes1);
imshow(Image1);
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function BW = imbinarize(I,varargin) %#codegen
%imbinarize Binarize image by thresholding.
% Copyright 2015-2018 The MathWorks, Inc.
% Syntax
% ------
%
% BW = imbinarize(I)
% BW = imbinarize(I,method)
% BW = imbinarize(I,'adaptive',Param,Value,...)
% BW = imbinarize(I,t)
%
% Input Specs
% -----------
%
% I:
% real
% non-sparse
% 2d
% uint8, uint16, uint32, int8, int16, int32, single or double
%
% method:
% string with value: 'global' or 'adaptive'
% default: 'global'
%
% Sensitivity:
% numeric
% real
% non-sparse
% scalar
% non-negative
% <= 1
% default: 0.5
% converted to double
%
% ForegroundPolarity:
% string with value either 'bright' or 'dark'
% default: 'bright'
%
% t:
% numeric
% real
% non-sparse
% 2d
% either scalar or matrix of the same size as I
%
% Output Specs
% ------------
%
% BW:
% logical
% 2D matrix
% same size as I
%
% Validate the input image
validateImage(I);
% Parse and validate optional inputs
[isNumericThreshold,options] = parseOptionalInputs(I,varargin{:});
coder.internal.prefer_const(isNumericThreshold,options);
if isNumericThreshold
% BW = imbinarize(I,t)
BW = binarize(I,options.t);
else
if strcmp(options.method,'global')
% BW = imbinarize(I,'global')
t = computeGlobalThreshold(I);
else
% BW = imbinarize(I,'adaptive',...)
t = adaptthresh(I,options.sensitivity,'ForegroundPolarity',options.polarity);
end
BW = binarize(I,t);
end
三、运行结果
四、备注
版本:2014a
原文地址:https://www.cnblogs.com/homeofmatlab/p/15039021.html
- CSS3过渡,不再为JS动画而犯愁
- 【编程基础】c语言中获取整数和浮点数的符号位
- 前端特效开发 | JS实现聚光灯看图效果
- 【专业知识】Android主线程的消息系统(Handler\Looper)
- CSS3渐变,就是这么玩
- 前端特效开发 | 图片翻转的制作
- 【Windows编程】系列第四篇:使用Unicode编程
- CSS3蒙版 — 元旦快乐!
- 轮播图效果,不再局限于JS制作!
- 【解疑答惑】css中经常被忽略的代码陷阱
- 时间序列预测全攻略(附带Python代码)
- “鼠标移入显示悬浮框”特效,也可以“高大上”
- 用交叉验证改善模型的预测表现(适用于Python和R)
- 前端特效制作 | CSS3圆形风格面包屑导航
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 表驱动法
- mysql将表结构导出excel
- 为什么会是Docker?
- 浅析http报文
- MySQL explain 中的 rows 究竟是如何计算的?
- SwiftUI: 使用 Touch ID 和 Face I
- Linux 系统中查找正在运行的进程的完整命令、当前工作目录等信息的方法
- Go by Example 中文:通道方向
- mycat数据库集群系列之mysql主从同步设置
- Tun/Tap接口使用指导
- Swift中? 、! 和 ??
- 故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
- 集成 SpringBoot 2.3.2 + Shiro 1.5.3 + jwt (无状态)
- 技术译文 | MySQL 8.x DDL 和查询重写插件
- iOS webp图片展示处理