基于Matlab的形状识别与计算图形周长,面积,圆周率
1.二值化图像
用于处理的图像,一般都是为二值图像。这里也不例外,因为要调用那些图像处理函数,传入的图像都是二值化后的图像。
二值化操作代码:
clc;
close all;
clear all;
img=imread('test.bmp'); %读取原图像
figure;
imshow(img);
grayimg = rgb2gray(img);
BWimg = grayimg;
[width,height]=size(grayimg);
figure;
imshow(grayimg);
%二值化
T1=80;
for i=1:widthfor j=1:heightif(grayimg(i,j)<T1)BWimg(i,j)= 255;else BWimg(i,j)= 0;endend
end
figure;
imshow(BWimg);%先闭运算 再开运算
se=strel('disk',5);
BWimg = imclose(BWimg,se);
BWimg = imopen(BWimg,se);
figure;
imshow(BWimg);
运行结果:
2.统计标注连通域
参考网址:
Matlab中bwlabel函数的使用
matlab的Regionprops详解
bwlabel函数
L = bwlabel(BW,n)
返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
4连通或8连通是图像处理里的基本感念:而8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。请注意“或”字的含义,就是满足其中一个条件就认为是连通的。
[L,num] = bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。
通俗的说,这个函数的作用是用来找这个二值图像中的连通区域的,对于不同的符合条件的连通区域(4连通,8连通)分别用不同的标号加以区别,结果保存在L这个矩阵里,而num里保存的是输入图像中连通区域的总数。
Regionprops函数
Regionprops:用途是get the properties of region,即用来度量图像区域属性的函数。
语法:STATS = regionprops(image,properties)
image是为传入的是bwlabel函数传出的,经过标记后的图像数据。
properties:这个则是你需要传入的参数。
比如我们需要求面积,则传入Area参数。
求周长,则传入Perimeter参数。
求离心率,则传入Eccentricity参数。
regionprops 函数具体有哪些参数可以参考Matlab官方文档。
在Matlab右上角查询regionprops函数,点开,则会有最官方的使用方法和参数含义。
这个函数非常强大,不止这个教程中的三个功能。
统计连通域代码:
%先闭运算 再开运算
se=strel('disk',5);
BWimg = imclose(BWimg,se);
BWimg = imopen(BWimg,se);
% figure;
subplot(2,2,4);imshow(BWimg);title('形态学操作后的图像');
%统计标注连通域
%使用外接矩形框选连通域,并使用形心确定连通域位置
[mark_image,num] = bwlabel(BWimg,4); %参考博客https://blog.csdn.net/wanrenwangxuejing/article/details/25108191
%bwlabel 寻找连通区域, 4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的
%num 表示连通区域的个数
%l是大小和BWing一样的图像数组,里面存放着对bwing图像的标签值(即判定为连通后,在L矩阵中标记出来)%regionprops 介绍
%参考 :https://blog.csdn.net/langb2014/article/details/49886787
%返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量
status=regionprops(mark_image,'BoundingBox');centroid = regionprops(mark_image,'Centroid');
标记图像各个图形,进行图形编号代码
figure;
imshow(mark_image);title('标记后的图像');for i=1:numrectangle('position',status(i).BoundingBox,'edgecolor','r');%参考https://blog.csdn.net/zr459927180/article/details/51152094%参数说明:position绘制的为二维图像(他是通过对角的两点确定矩形框)%edgecolor 指边缘图像,r表示变换为红色。%facecolor 指内部填充颜色。text(centroid(i,1).Centroid(1,1)-15,centroid(i,1).Centroid(1,2)-15, num2str(i),'Color', 'r') %这个是为绘制出来的矩形框图标记数字
end
运行结果图像:
3.计算周长,面积与离心率
接上一次的题目:计算出图像左上角绿色方块的面积和周长,计算出右下角红色椭圆的离心率
要计算出左上角和右下角图像的值,首先,你要先识别出那个图形,你才能对其进行计算。这里就需要使用到前面bwlabel函数标记的矩阵。
代码即:
image_part3 = (copy_mark_image == 3);
根据标记的数值,来判断是不是那个区域,然后将那个标记的区域取出,并显示出来。
效果图:注意,使用regionprops函数计算周长和面积,计算的是白色区域的周长和面积。黑白颜色颠倒,那个计算出来的数值则不正确。
计算代码:
copy_mark_image = mark_image;
image_part3 = (copy_mark_image == 3); %%这边进行区域的选择,例如只保留3
% image_part3 = (mark_image ~= 3);
figure;
imshow(image_part3);%求面积
% total = bwarea(image_part3);
% fprintf('total = %f\n', total);
round_area = regionprops(image_part3,'Area');
fprintf('round_area = %f\n', round_area.Area);%求周长
girth = regionprops(image_part3,'Perimeter');
% girth.Perimeter
fprintf('s.Perimeter = %f\n', girth.Perimeter);%这边进行区域的选择,例如只保留10
image_part10 = (mark_image == 10);
figure;
imshow(image_part10);%求红色椭圆的离心率
oval = regionprops(image_part10,'Eccentricity');%离心率 0 < e < 1之间,e越小,越像圆。
% oval.Eccentricity
fprintf('oval.Eccentricity = %f\n', oval.Eccentricity);
计算结果将在matlab的命令行窗口打印出来:
round_area = 7044.000000 —— 面积
s.Perimeter = 320.200000 —— 周长
oval.Eccentricity = 0.915874 ——离心率
基于Matlab的形状识别与计算图形周长,面积,圆周率相关推荐
- matlab 区分形状,基于matlab的形状识别解析.doc
1.设计目的 基于Maltab或者C语言对图像进行识别.编写摄像头采集图像程序,对采集的图像进行预处理,如图像增强.图像分割等处理,对于处理的图像进行特征提取,根据特征进行模式识别,如对三角形.正方形 ...
- 基于matlab的车牌识别系统设计错误,基于MATLAB的车牌识别系统设计
在图像处理领域,数字图像处理技术取得了飞速发展,并在国民经济的各个领域得到广泛应用.尤其在智能交通管理中汽车牌照识别技术方面具有重要的理论意义和实用价值.汽车牌照识别技术主要任务是实现对汽车监控视频所 ...
- 基于matlab的车牌识别系统设计,基于MATLAB的车牌识别系统设计
在图像处理领域,数字图像处理技术取得了飞速发展,并在国民经济的各个领域得到广泛应用.尤其在智能交通管理中汽车牌照识别技术方面具有重要的理论意义和实用价值.汽车牌照识别技术主要任务是实现对汽车监控视频所 ...
- 基于MATLAB的车牌识别研究
基于MATLAB的车牌识别研究 一.课题背景 随着我国公路事业的发展,人工管理方式已经不能满足如今实际的需要.车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,是现代智能交通系统(Int ...
- 基于matlab的车牌识别系统程序,基于matlab的车牌识别系统的设计(附程序).doc
基于matlab的车牌识别系统的设计(附程序).doc 1车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位.字符分割和字符识别三个主要部分.本文首先确定车辆 ...
- 基于MATLAB的人脸识别系统
基于MATLAB的人脸识别系统 一.课题背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除 ...
- matlab 指纹,一种基于matlab的指纹识别方法
一种基于matlab的指纹识别方法 [技术领域] [0001 ] 本发明涉及指纹识别领域,特别涉及一种基于MTLAB的指纹识别方法. [背景技术] [0002] 传统的安防系统主要采用基于令牌或密码的 ...
- 基于Matlab的车牌识别系统完整版课论文分享 快看
基于Matlab的车牌识别系统 一.设计原理 车辆车牌识别系统的基本工作原理为:将摄像头拍摄到的包含车辆车牌的图像通过视频卡输入到计算机中进行预处理,再由检索模块对车牌进行搜索.检测.定位,并分割出包 ...
- 基于matlab的人脸识别算法
基于matlab的人脸识别算法 1. 主成分的数目的选取 前已指出,设有p个随机变量,便有p个主成分.由于总方差不增不减,C1,C2等前几个综合变量的方差较大,而Cp,Cp-1等后几个综合变量的方差较 ...
最新文章
- ab url 带参数 测试
- 【每周CV论文】初学深度学习图像风格化要读的文章
- QT学习:读写文本文件
- windows 8 安装iis .net 3.5
- extjs中store获取后台数据_Excel实战技巧64: 从工作簿中获取数据(不使用VBA)
- 最快的存储过程分页 50W
- 病毒行为分析初探(二)
- 安卓移动办公软件_小企业使用的移动办公软件
- 《Lua程序设计》第7章 迭代器与泛型for 学习笔记
- html添加哔哩哔哩视频,哔哩哔哩在线视频编辑器使用教程汇总
- IDEA导入项目后如何运行
- Windows安装--拼音分词器
- 关于ASO优化刷榜、冲榜、维榜、锁榜科普百科
- 手写笔记软件android,有笔没笔一样写 五款安卓手写笔记APP
- 宋星:误读数据等于自杀
- element-ui中的多层表单循环验证处理
- C#使用List.Clear()方法可以让GC回收内存吗?
- C++语言程序设计第五版 - 郑莉(第四章课后习题)
- Apache基于域名、端口、IP的虚拟主机配置(Centos 6.5)
- 操作Oracle类型CLOB和BLOB
热门文章
- postfix配置积累(不断的积累)
- 苹果手机关闭自动更新_使用苹果手机一定要关闭这四大功能,让手机更加省电、更加流畅...
- maya nCloth
- mkdir创建目录问题
- [.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 大型控件的ImageField)...
- 山东农商行真题计算机类,2019山东农商行招聘考试计算机题库(七)
- 【深入理解C++】函数模板和类模板的特例化
- idea 编译项目的时候遇到:java: 无法访问com.sun.beans.introspect.PropertyInfo
- Frida 基础环境部署和运行第一个 hook demo
- 反射 BindingFlags.IgnoreCase 的用法