判断图像中的三角形,圆形和矩形
来源:互联网 发布:淘宝帮忙跑腿 编辑:程序博客网 时间:2024/06/06 05:35
这是我自己做作业的时候写的一点东西,判断一张图片中的形状(图片如下,放到其他图片的话可能就不适用了),所以仅供参考,自己水平确实比较低,希望大家不喜勿喷~
我们使用的图片如下:
结果如下:
下面稍微介绍一下我自己的处理方法:
1.首先是将彩色变灰度。
2.因为图片含有边框,所以首先对边框进行处理,将边框去除。 去除后的图形如图3. 可以看到边上的圆有点变形,不过不影响形状的判断,
只是会影响质心位置的计算。
3. 为了计算质心。 先对图形进行边缘提取,然后计算每块区域所有点的位置坐标平均值,即质心坐标
4.计算每块区域边缘点到质心的距离,进行曲线拟合。根据极点的数目判断图形的形状。
5.把区域的形状标在图片中
我的matlab代码
f4=imread('Project2016.jpg'); %读取图像 imshow(f4)a=rgb2gray(f4); %将彩色图像转换成灰度图像a_size = size(a);b = ones(a_size);for i =1:a_size(1) for j = 1:a_size(2) if a(i,j)>=0 && a(i,j)<=50 b(i,j)=0; end endendB =[1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1]; %此模板的选择有待再考虑b = imerode(b,B);for i =1:a_size(1) for j = 1:a_size(2) if b(i,j)==0 a(i,j)=255; end endendimshow(a)bw=edge(a,'prewitt'); %边缘检测 边缘检测结束后发现还是有一些鼓励的小点,不多它们没有形成闭合的曲线[L,num] = bwlabel(bw); %这里已经给每个区域标好号了,使用bwlabel的话会把鼓励的不成闭合曲线的点也算进去%一些独立点的像素数量是比较少的,所以可以通过检测每一块区域的像素点大小来决定是不是要删除此像素块for i= 1:num [r,c]=find(L==i); size_L = size([r,c]); if size_L(1,1)<30 L(r,c)=0; endendL = logical(L);se = strel('disk',4); %创造一个平坦的圆盘型结构元素,其半径为2L = imclose(L,se); %关闭图像[L,num1] = bwlabel(L);L = rot90(L,3);L = fliplr(L);pixel = cell([num1,1]);centre = zeros(num1,2);size_L = size(L);for i=1:num1 [r,c]=find(L==i); pixel{i} = [r,c]; hold on mean_pixel = mean(pixel{i}); centre(i,:) = mean_pixel; plot(mean_pixel(1,1),mean_pixel(1,2),'r*') size_r = size(r); distance = zeros(size_r); for j = 1:1:size_r(1) distance(j) = sqrt((r(j)-mean_pixel(1))^2 + (c(j)-mean_pixel(2))^2); end p=polyfit((1:size_r(1))',distance,7); x = (1:size_r(1))'; y = p(1)*x.^7 + p(2)*x.^6 + p(3)*x.^5 + p(4)*x.^4 + p(5)*x.^3 + p(6)*x.^2 + p(7)*x.^1 + p(8); %plot(x,y) %对数据进行拟合,因为数据过于杂乱,不好判断 min_distance = min(distance); max_distance = max(distance); min_y = min(y); max_y = max(y); num_peaks = size(findpeaks(-y)); if (max_distance - min_distance)<= 15 && (max_y - min_y) <= 15 text(mean_pixel(1,1),mean_pixel(1,2),sprintf('圆形 %d',i)) elseif num_peaks(1) == 2 text(mean_pixel(1,1),mean_pixel(1,2),sprintf('三角形 %d',i)) else text(mean_pixel(1,1),mean_pixel(1,2),sprintf('矩形 %d',i)) end end%}
0 0
- 判断图像中的三角形,圆形和矩形
- 三角形和矩形相交的判断
- canvas绘制矩形、三角形、圆形
- 纯css画各种图像 包括矩形、圆形、三角形、多边形、爱心、八卦等
- hdu2948 简单计算几何 判断点在三角形 矩形 圆形内
- Java小程序之计算三角形/圆形/矩形的周长和面积
- csuoj1812: 三角形和矩形
- Python画矩形和圆形
- 图像中的矩形检测
- IOS绘制各种图形(三角形,圆形,矩形,椭圆等)
- 怎样判断平面上一个矩形和一个圆形是否有重叠?
- 怎样判断平面上一个矩形和一个圆形是否有重叠?
- CSU 1812 三角形和矩形
- CSUOJ 1812 三角形和矩形
- 圆形 矩形
- 给轮廓画出矩形和圆形边界
- 给轮廓画出矩形和圆形边界
- 圆形和矩形的碰撞检测
- Android应用界面布局
- Tanks联机版服务端开发
- Linux常用命令
- 模拟服务器MockServer之Moco详细介绍
- CyclicBarrier(同步器)
- 判断图像中的三角形,圆形和矩形
- MySQL 控制台基本语句
- 自定义view的事件分发
- Eclipse Git合并代码
- mapreduce创建solrcloud索引
- 程序员面试金典——解题总结: 9.17中等难题 17.12设计一个算法,找出数组中两数之和为指定值的所有整数对。
- JS console常用的方法
- Dubbo学习笔记(四)------策略
- 1.4集成开发环境简介