MATLAB·提取图像中多个目标
基于matlab工具箱提取图像中的多目标特征(代码如下):
代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~
%%ROI Testing
close all;
clear all;
clc;
I=imread('Test.png');
I=rgb2gray(I);
I=I(:,:);
[m,n]=size(I);
I_BW=I;
for Row1=:m
for Clo1=:n
if I(Row1,Clo1)>
I_BW(Row1,Clo1)=;
else
I_BW(Row1,Clo1)=;
end
end
end
imshow(I)
%figure,imhist(I)
figure,imshow(I_BW)
I_BW_morph=bwmorph(I_BW,'erod',0.8);%形态学腐蚀原理
Filter=[-,-,-;-,,-;-,-,-];%高通滤波器,挖出二值图像的边界像素
I_Filter=imfilter(I_BW_morph,Filter);%使用滤波的方法得到的图像的边界部分是白色的,边界有变化所以经过高通滤波器后为白色
figure,imshow(I_Filter)
I_Edge=I_Filter;
I_Edge(:,)=;%由于采用的是滤波器的方法来实现边缘的提取,在图像的边界部分会出现颜色的变化,因此我们需要把图像边缘的部分置为0
I_Edge(:,n-)=;
I_Edge(,:)=;
I_Edge(m-,:)=;
figure,imshow(I_Edge)
I_Edge=uint8(I_Edge);%图像uint8化
ROI_Buffer=uint8(zeros(m,n,));%四个模板缓存区域
C_Shape=zeros(,);
Label=; for Row2=:m
for Clo2=:n
if I_Edge(Row2,Clo2)==
Label=Label+
[ROI_Buffer(:,:,Label),C_Shape(Label,)]=Pixel_Search(I_Edge,Row2,Clo2,m,n);%把当前的数据赋给模板
figure,imshow(*ROI_Buffer(:,:,Label));%显示所得到的对应标号为Label的图像边界,这里需要注意的问题是:由图像的色彩等级不同,因此得到的图像可能全是黑色,需要乘以255(uint8)
C_Shape(Label,)
I_Edge=I_Edge-ROI_Buffer(:,:,Label);%去除原图中已经提取完成的部分
end
end
end
Pixel_Search函数实现如下:
%While 方法寻找边缘轮廓 采用4邻域方式
function [Pic_Process,C]=Pixel_Search(Pic,Row,Clo,m,n)
While_Flag=;
C=;%周长像素点计数
Pic_Process=zeros(m,n);%模板建立
Pic_Buffer=Pic;%图像缓存建立
while (While_Flag==)%while循环判断
C=C+;
Pic_Process(Row,Clo)=;%图像模板区域置位
Pic_Buffer(Row,Clo)=;%图像缓冲区域清零 if Clo<= || Row>m || Clo>n || Row<=%防止图像检测过程中,边缘溢出
break;
end if Pic_Buffer(Row,Clo-)==%循环判断区域结果
Clo=Clo-;
While_Flag=;
else if Pic_Buffer(Row+,Clo)==%循环判断区域结果
Row=Row+;
While_Flag=;
else if Pic_Buffer(Row,Clo+)==%循环判断区域结果
Clo=Clo+;
While_Flag=;
else if Pic_Buffer(Row-,Clo)==%循环判断区域结果
Row=Row-;
While_Flag=;
else
While_Flag=;%各个循环条件都不满足,即像素种子点周围没有边缘像素,即可跳出while循环,结束搜索
end
end
end
end
end
end
处理的图片如下:
原图:显示图像:
阈值化二值分割:
滤波导致的边缘问题:
第一个区域提取:
第二个区域提取:
第三个区域提取:
后期的优化还需要进一步完成,对于复杂的图形的ROI区域分割还需要进一步处理,现已经解决了联通区域的周长问题,还需要解决的问题有面积的求解以及区域的形态学特征的求解~
注:这里有一个问题,由于边缘的提取使用了高通滤波器,边缘的路径出现大量的弯折现象,这就导致了程序计算得到的边界周长约1.8倍于实际的ROI区域的边界周长,至于解决办法,后面解决,现在先记录在案~
A1:祖冲之切割边缘按照多边形求解周长。
A2:求解相邻像素点的中间值,x=(x1+x2)/2,y=(y1+y2)/2,最后根据新的边缘求解周长。
在这里要感谢GISPALAB实验室的各位老师和学长学姐的帮助!谢谢~
MATLAB·提取图像中多个目标的更多相关文章
- 使用 Python 识别并提取图像中的文字
1. 介绍 介绍使用 python 进行图像的文字识别,将图像中的文字提取出来,可以帮助我们完成很多有趣的事情. 2. 必备工具 tesseract-ocr 下载地址: https://github. ...
- matlab 提取图像轮廓(图像边缘提取)
利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread ...
- matlab在图像中画长方形(框)
function [state,result]=draw_rect(data,pointAll,windSize,showOrNot) % 函数调用:[state,result]=draw_rect( ...
- [转] 利用Matlab提取图片中曲线数据
原文地址 网易博客 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水 平放置的情况,而实际 ...
- matlab 对图像操作的函数概览
转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...
- matlab截取图像
声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 对于Matlab的使用情况常常是这样子的,很多零碎的函数名字很难记忆,经常用过后过一段时间就又忘记了,又得去网 ...
- Codrops 实验:使用 Vibrant.js 提取图像颜色
Codrops 分享了一个有趣的颜色提取实验.这个想法是创建图像的调色板,既有图像本身的潜移默化的影响,也有一些花哨的颜色延伸.通过使用 Vibrant.js 来提取图像中的颜色,并通过 CSS 过滤 ...
- 图像中的掩膜(Mask)是什么
在图像处理中,经常会碰到掩膜(Mask)这个词.那么这个词到底是什么意思呢?下面来简单解释一下. 1.什么是掩膜 首先我们从物理的角度来看看mask到底是什么过程. 在半导体制造中,许多芯片工艺步骤采 ...
- Matlab实现Hough变换检測图像中的直线
Hough变换的原理: 将图像从图像空间变换至參数空间.变换公式例如以下: 变换以后,图像空间与參数空间存在下面关系: 图像空间中的一点在參数空间是一条曲线,而图像空间共线的各点相应于參数空间交于一点 ...
随机推荐
- Extmail 批量添加邮箱用户
Extmail 设置批量添加邮箱用户 需要修改 userctl.pl 文件 修改 userctl.pl 文件 cd /var/www/extsuite/extman/tools 编辑 userc ...
- centOS7安装Composer
1.进入Composer国内镜像网站文档页查看安装方法: https://docs.phpcomposer.com/00-intro.html 2.在centOS系统中进入特定目录执行以下命令: cd ...
- loadrunner函数解密之web_reg_save_param
loadrunner工具的使用,最关键的在于3个地方: A:脚本的编写 B:场景设计 C:性能测试结果分析 其 中难度比较大的第一步是:编写脚本,有很多人对于loadrunner里面的各种函数使用的并 ...
- ubuntu + usb转RS232驱动
1. 购买USB转串RS232/485/422 如果你的电脑有串口的话,就不用买啦,我的台式机有串口,把USB转串的线插上之后,unbuntu就不支持了.(自己有嘛) 就是输入 ls /dev/tt ...
- 【PE结构】PIMAGE_FILE_HEADER中TimeDateStamp的时间戳与标准时间转换
计算PE文件创建时间,需要对时间进行转换,也就是将时间戳转换成特定的格式,或者特定的格式转换成时间戳. pImageFileHeader->TimeDateStamp的值为1487665851 ...
- caffe中使用python定义新的层
转载链接:http://withwsf.github.io/2016/04/14/Caffe-with-Python-Layer/ Caffe通过Boost中的Boost.Python模块来支持使用P ...
- ulimit -n 修改
Linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值.那么应该在哪里设置呢? [root@loca ...
- 详解.NET IL代码(一)
本文主要介绍IL代码,内容大部分来自网上,进行整理合并的. 一.IL简介 为什么要了解IL代码? 如果想学好.NET,IL是必须的基础,IL代码是.NET运行的基础,当我们对运行结果有异议的时候,可以 ...
- imp高版本的dmp文件报错问题
imp高版本的dmp文件报错问题 导出方:oracle 11R2 www.2cto.com 导入方:oracle 10R2 通过imp导入时提示如下: 解决方法: 通过编 ...
- centos6.5环境利用scp实现自动化文件备份
centos6.5环境利用scp自动上传备份文件到指定服务器中 需要备份的主机 192.168.3.17 存放备份的主机 192.168.3.18 目的:将3.17主机上/data/storage的文 ...