目的:将一副包含一个或多个矩形(圆形,三角形,正五边形,正六边形),且彼此独立不粘连的图像进行图像切割,提取出里面单独的形状,并利用占空比的方法判断图像的形状。
主程序代码:

%% 代码作用:连通域的分割,判断识别图像类型
% 输入图像中仅包含一个或多个矩形,圆形,三角形,正五边形,正六边形,彼此独立且不粘连
% 思路:
%       直接进行切割,且进行局部图像提取保存。然后利用占空比的方法判断图像的类型
% 说明:
%       暂时只能针对矩形,圆形,三角形,正五边形 ,正六边形的图形检测。如需添加
% 其他类型需要对ratio_search()函数进行扩充。
% 作者:cw      时间:2019.8.14
clc;
clear all;
t0 = clock;
%% 图像读入,灰度化,二值化,显示二值图
img=imread('TEST.jpg');
img = rgb2gray(img);
BW=~im2bw(img);         % 背景用0表示,有效区域用1表示
figure;imshow(BW),title('二值显示');%% 连通域切割,8连通域
% 图像连通域标记
[Local,image_num] = bwlabel(BW,8);
% RGB = label2rgb(Local);
% figure;imshow(RGB),title('rgb显示连通域');% 连通域提取步骤:
% 1 先将图像分为5张,每张图只放一个标签区域;
% 2 删除个图中的无效区域;
% 3 创建元组来保存切割后的图像;
Multi_pic = Multi_Local(Local,image_num);
MultiPic_cell = cell(1,image_num);
for i=1:image_numLocal_shape = [];Postion_range = EdgeCheck(Multi_pic,i);Local_shape = Image_Cut(Local,Postion_range,i);MultiPic_cell{i} = Local_shape;
end
%% 判断图像类型并显示各个图像
for i =1:image_num    % 占空比法判断图像的类型Class_name{i} = ratio_search(MultiPic_cell{i})figure;imshow(MultiPic_cell{i}),title(['this is ', Class_name{i}]);
end%% 耗时计算
Time_consumed = etime(clock,t0);

函数Multi_Local.m:

function Multi_pic = Multi_Local( Labeled_Pic,Label_num)
% 将标记好的图差分成多张图,每张图仅有一个标签
% 采用list结构存储效率更高,可惜MATLAB中没有对应数据类型
[m,n] = size(Labeled_Pic);
TEMP = zeros(m,n,Label_num);
for i = 1:mfor j = 1:nfor k = 1:Label_numif Labeled_Pic(i,j) == kTEMP(i,j,k) = 1;break;endendend
endMulti_pic = TEMP;
end

函数EdgeCheck.m:

function Position_range = EdgeCheck(Multi_Image,num_Label)
% 作用:找出标记图像(Multi_Image中标号为num_Label的局部图的坐标范围
% Image_Labeled:标记图像
%     num_Label:区域标记号
% [x1,y1,x2,y2]:标记区域的左上角和右下角坐标,x是列,y是行
X_MAX=0;X_MIN =0;Y_MAX=0;Y_MIN =0;
Image_Labeled = Multi_Image(:,:,num_Label);
% 计算指定标记的区域范围
H = size(Image_Labeled,1);
% 找出X_MIN和X_MAX
for j=1:H% 从上到下,逐行寻找等于1的行if max(Image_Labeled(j,:))==1Y_MIN = j;break;end
end
for j=1:H% 从下到上,逐行寻找等于1的行if max(Image_Labeled(H+1-j,:))==1Y_MAX = H+1-j;break;end
endL = size(Image_Labeled,2);
% 找出Y_MIN和Y_MAX
for k=1:L% 从左到右,逐行寻找等于1的列if max(Image_Labeled(:,k))==1X_MIN = k;break;end
end
for k=1:L% 从右到左,逐行寻找等于1的列if max(Image_Labeled(:,L+1-k))==1X_MAX = L+1-k;break;end
endPosition_range =[X_MIN,Y_MIN,X_MAX,Y_MAX];
end

函数Image_Cut.m:

function Image = Image_Cut( Labeled_Pic,Position,label )
% 根据参数指定的范围将图像切割出来称为一个单独的小图片
% Labeled_Pic:标记的图像
% Position:要拷贝的区域
%    label:标签号
%    Image:返回一个切割好的局部图
TEMP = Labeled_Pic(Position(2):Position(4),Position(1):Position(3));
for i = 1:size(TEMP,1)for j = 1:size(TEMP,2)if TEMP(i,j) ~= labelTEMP(i,j) = 0;endend
endImage = TEMP;
end

函数Image_Cut.m:

function Iamge_class = ratio_search( input_image )
% 作用:利用图像的占空比判断图像是什么类型
% input_image:输入的局部图,二值图,有效区域是标签(1,2,3...),背景是0
% Iamge_class:图像类型名称,例如:矩形
% 思路:
%   将三角形,矩形,五角形,六角形,圆形的占空比预先保存到一个元组中;
%   对输入图像计算占空比,然后和数组中的个元组素对比;
%   这只是个粗略的结果,根据得到了占空比进行邻近的几个排序,后续还需要进行轮廓验证% 占空比模板库
Class_Module = {'triangle','rectangle','pentagon','hexagon','circle'};
Ratio_Module = [0.5,1,0.7,0.75,0.79];
% 图像大小
[m,n] = size(input_image);
% 计算占空比
index_vector = find(input_image ~= 0);
RATIO = size(index_vector,1)/(m*n);
TEMP = abs(Ratio_Module - RATIO);
ind = find(TEMP == min(TEMP));
% 取出图像名称
Iamge_class = Class_Module{ind};
end

输入图像TEST.jpg:

输出结果:

matlab实现简单图形的识别相关推荐

  1. matlab——一个简单的动物识别专家系统

    本实验中用matlab实现一个简单的动物识别专家系统,该系统是用来识7种动物的,但在规则库中形成了15条规则.首先将动物分成哺乳动物.鸟.蹄类动物.肉食动物4大类,然后通过继续询问得到要的结果.本程序 ...

  2. 计算机基础设计的毕业论文图形,简单几何图形的识别和编辑 毕业论文 计算机应用基础.doc...

    摘要 本论文主要讲述了图像文件(bmp)文件格式下中简单图形的识别,主要是直线和圆的识别,这在工程图的识别和其他领域中都有很多的应用. [关键词]:图形识别 .图像处理.霍夫变换.单义域.多义域.de ...

  3. MATLAB基于形态学的目标检测(一)简单图形统计

    (目标检测)MATLAB基于形态学的目标检测(一)简单图形统计 一.生成测试图像 二.连通区域目标统计 三.结合形态学 总结 by HPC_ZY 本文主要介绍二值形态学在目标检测上的用法, 就不讲形态 ...

  4. 利用matlab绘制简单IFS图形(Sierpinski三角形和BarnsleyFern巴恩斯利蕨)

    利用matlab绘制简单IFS图形(Sierpinski谢尔宾斯基三角形和BarnsleyFern巴恩斯利蕨) 一.SierpinskiTriangle谢尔宾斯基三角形 谢尔宾斯基三角形(英语:Sie ...

  5. matlab——红绿灯颜色及数字识别(三)

    实验总结:红绿灯颜色以及数字识别(三):形状识别 一.知识背景   在matlab--红绿灯颜色及数字识别(二)中已经完成了对信号灯区域的裁剪,对信号灯形状的识别这里设置了三条辅助线来进行完成对笔画的 ...

  6. 基于MATLAB的简单手势识别

    匆匆在看完了MOOC的<数字图像处理>,为了巩固所学,做了一个简单的手势识别(只能识别手势1.2.3)! 0.安装硬件支持包软硬件安装 0.1.MATLAB R2021b安装 软件包下载地 ...

  7. 使用Tesseract (OCR)实现简单的验证码识别(C#)+窗体淡入淡出效果

    来园子也有一段时间了,一直没时间写点东西,说实话刚开始也不知道写什么,一直以来对验证码识别比较感兴趣,曾经想着自己处理图形实现识别验证码, 不过感觉对我来说太难了,偶然中再网上发现了Tesseract ...

  8. 用matlab画出ex,如何用matlab画函数图形

    1.首先打开matlab应用程序,输入下方的代码:2.然后按确定会出现一张图,如下图所示,这就是 怎么用matlab画函数图形?请看下面方法. 方法 打开Matlab. r0=5;b=1;t0=2;s ...

  9. matlab仿真动画,用matlab制作简单仿真动画

    用matlab制作简单仿真动画,并生成.avi格式的电影文件 MATALB知识点2008-05-01 13:17:54 阅读152 评论0 字号:大中小订阅 第一种形式:利用for循环,在一定时间内控 ...

  10. 基于MATLAB人脸面部检测的口罩识别系统

    基于MATLAB人脸面部检测的口罩识别系统 课题意义 作为数字图像处理和计算机视觉领域的一个重要组成部分,利用摄像机对图像进行采集,从图像中检测人脸并进行口罩穿戴的识别的有着非常重要的研究意义和应用价 ...

最新文章

  1. 我的VC++——对话框中显示GIF格式的图片
  2. Centos7下编译安装python2.7.10
  3. Matrix Equation
  4. 腾讯为什么不开发linux软件下载,你认为国产操作系统如何搭建生态?为什么腾讯不给Linux系统适配QQ?...
  5. android数据库文件是否加密存储,详解Android数据存储之SQLCipher数据库加密
  6. c语言课程案例设计报告,C语言课程设计报告—范例解读.doc
  7. Linux(Ubuntu)如何处理新添加的硬盘
  8. SQL语法整理(五)-视图
  9. 数据类型--Number类型
  10. android切换皮肤,Android 应用更换皮肤实现方法
  11. 简单而直接的Python web 框架:web.py
  12. 2 会计要素和会计科目
  13. 数据库闯新世纪----施伯乐、周傲英、朱杨勇
  14. 机器学习零基础?手把手教你用TensorFlow搭建图像识别系统
  15. GOTC 2023全球开源技术峰会
  16. [FromLOL]了解其他职业
  17. LCS、LIS及LCIS
  18. 当程序员这么多年,我学到了25条人生经验
  19. 经贸英语中专用名词与常用词如何翻译?
  20. 微信H5页面,返回上一页面后页面不会自动刷新

热门文章

  1. 举例Halcon,简述数字图像处理之Blob分析和纹理分析texture_laws
  2. 迪尼斯神奇英语全32集含教材
  3. 你真正付出了全部努力了吗?
  4. 《腾讯传》五、荡清环宇,横扫外来者; 千夫所指,腾讯“三宗罪”
  5. D3.js 绘制地图
  6. matlab演示波粒二象性,MATLAB实验电子波动性的Matlab仿真
  7. android root是什么意思啊,root是什么意思?安卓手机怎么root
  8. Python open()函数 文件打开方法的用法参数总结(全)
  9. C语言 单引号和双引号
  10. 《计算传播学导论》读书笔记:第六章 网络传播模型与机器学习框架