本文用matlab实现了基本多边形的检测、提取。

本文涉及到的知识点如下:

1、Canny边缘检测。bw = edge(gray,'canny',[0 , 50/256]);

2、细化操作。im=bwmorph(image,'thin',Inf);

3、边界追踪。edgelist=bwboundaries(im);

4、边界的多边形近似。linefit_Prasad_RDP_opt(edgelist);

本文算法思路借鉴了Nash的博客,地址:http://opencv-code.com/tutorials/detecting-simple-shapes-in-an-image/点击打开链接

边界的多边形近似算法为:Douglas-Peucker algorithm,算法的matlab实现我引用了Dilip K. Prasad分享的文件。本文所有操作的理论基础均可在冈萨雷斯的《数字图像处理》中找到答案。

Douglas-Peucker algorithm地址:https://docs.google.com/file/d/0B10RxHxW3I92dG9SU0pNMV84alk/edit?pli=1点击打开链接

算法实现过程可分为以下几步。

1、提取边缘。

2、进行形态学处理,分割图像。

3、进行细化操作,减小计算量。

4、用多边形近似边界。

5、判断该顶点是否有效。(根据相邻顶点之间的距离)

转载请注明出处:http://blog.csdn.net/u010278305

下面给出源代码:

%function:

% 基于最小距离分类器的模板匹配

% 寻找图片中与已知模板的匹配区域

% 程序中调用了Dilip K. Prasad对Ramer–Douglas–Peucker algorithm的matlab实现

%referrence:

% 思路借鉴:http://opencv-code.com/tutorials/detecting-simple-shapes-in-an-image/

% Ramer–Douglas–Peucker algorithm:http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

%date:2015-1-10

%author:chenyanan

%转载请注明出处:http://blog.csdn.net/u010278305

%清空变量,读取图像

clear;close all

src = imread('basic_shapes.png');

figure('name','原始图像'),

imshow(src),title('src'),

%Convert to grayscale

gray=rgb2gray(src); gray = im2double(gray);

%Convert to binary image using Canny

bw = edge(gray,'canny',[0 , 50/256]);

%dilate

dilateElement=strel('square', 5);

bw=imdilate(bw, dilateElement);

%提取每个连通区域

stats = regionprops(bw, 'Image');

statssize= numel(stats);

plotsize=ceil(sqrt(statssize));

figure('name','分离结果'),

num=zeros(statssize,1);

%算法核心

for i=1:statssize

image=stats(i).Image;

%进行细化操作

im=bwmorph(image,'thin',Inf);

% getting the edge data.

edgelist=bwboundaries(im);edgelist=edgelist.';

% calling linefit_Prasad_RDP_opt

[edgelist,seglist,precision_list,reliability_list,precision_edge,reliability_edge, time_edge] = linefit_Prasad_RDP_opt(edgelist);

boundnum=length(seglist{1}(:,:));

bound=0;

sizepic=sum(size(im));

%判断每个顶点之间的间距是否符合要求

for j=1:boundnum-1

cornerdiff=seglist{1}(j,:)-seglist{1}(j+1,:);

cornerdiff=sqrt(sum(cornerdiff.^2));

if(cornerdiff>0.09*sizepic)

bound=bound+1;

end

end

num(i)=bound;

%进行绘图并标识

subplot(plotsize,plotsize,i);imshow(image),

if bound<7

title(bound);

else

title('圆');

end

end

运行效果如下:

源图像已上传:

matlab多边形检测_Matlab图像处理学习笔记(四):多边形检测相关推荐

  1. matlab连通区边界_Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI...

    本博客主要记录我学习运用matlab进行一些基本的图像处理的一些笔记,如果有不当的地方,欢迎批评指正,一起学习,一起进步. 本篇是第一篇,只涉及到一些基本的操作,涉及到的知识点如下: 1.二值化 2. ...

  2. 【台大郭彦甫】Matlab入门教程超详细学习笔记四:数据类型与文件读写(附PPT链接)

    变量类型与文件读写 前言 一.变量类型 1.numeric(数值类型) 2.char(字符类型) 3.string(字符串类型) 4.structure(结构体) 5.cell(元胞数组) 5.高维数 ...

  3. matlab bwmorph spur,matlab图像处理学习笔记-数学形态与二值图像操作

    matlab图像处理学习笔记-数学形态与二值图像操作 数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单. 9.1 数学形态学图像处理 基本思想:利用一个称作结构元素(structurin ...

  4. 数字图像处理学习笔记(四)——数字图像的内插、度量、表示与质量

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  5. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  6. 数字图像处理学习笔记(一):特征检测和匹配概述

    数字图像处理学习笔记(一):特征检测和匹配概述 参考博客: 特征点的匹配 SIFT特征详解 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 1.特征点概述 如何高效且准确的匹配出两个不同 ...

  7. 数字图像处理学习笔记(六)——数字图像处理中用到的数学操作

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  8. 数字图像处理学习笔记 六 彩色图像处理

    目录 (一)彩色模型介绍 1.1 RGB模型 1.2 CMY.CMYK模型 1.3 HSI彩色模型 1.4 HSV模型 1.5 YCbCr 彩色空间 (二)伪彩色图像处理 (三)全彩色图像处理及彩色变 ...

  9. 图像处理学习笔记(二)

    图像处理学习笔记(二) 4 OpenCV图像处理: 4.2 形态学操作: 4.2.1 连通性: 4.2.1 腐蚀和膨胀: 4.2.2 开闭运算: 4.2.3 礼帽和黑帽: 4.2.4 形态学操作总结: ...

最新文章

  1. 机器学习验证集为什么不再有新意?
  2. 【译】MVVM Tutorial with ReactiveCocoa: Part 1/2
  3. 【运营】各大电商七夕活动对比
  4. mysql索引图文操作_图文并茂,说说MySQL索引
  5. 传统公司部署OpenStack(t版)简易介绍(七)——cinder模块部署
  6. EE Servlet 3:使用会话和过滤器开发用户登录
  7. Linux文件属性之r、w、x
  8. 少年开始学习c#编程,过路的大神请担待!
  9. DWA泊车算法的实现
  10. sql azure 语法_如何:Azure中SQL Server文件快照备份
  11. smarty capture使用
  12. android xml 设置半透明
  13. oracle查找隐藏字符串,oracle chr(0) 隐藏字符串
  14. 计算机c盘如何扩容,C盘空间不足怎么办?4种方法获得更多空间!
  15. 使用Kubeadm快速部署K8S集群
  16. 鸿蒙修复了蓝牙麦克风问题吗,手机变传声器、麦克风?华为P40的隐藏功能你知道吗?...
  17. (附源码)php单招志愿采集系统 毕业设计 091409
  18. JSON字符串的使用
  19. SRM 475 DIV1 900
  20. 亵渎小说介绍_从PHP过渡到:亵渎神灵,虚张声势还是常识?

热门文章

  1. Docker学习笔记 — Swarm搭建Docker集群
  2. WIF调试分享(ap6256)
  3. URP/LWRP Shader实现描边效果
  4. 武汉伯钧成科技有限公司之行的郁闷感受
  5. 如何理解卷积:信号处理、图像处理中的应用
  6. 操作系统LAB1实验报告
  7. HP Cloud Recovery Tool
  8. 基于区块链的大数据确权方案
  9. arm linux fpu,多媒体处理,利用ARM NEON/FPU提升performance
  10. python中numpy模块下的np.clip()的用法