图像形状及数量识别(matlab实现)
米粒形状识别
文章目录
- 米粒形状识别
- 概述
- 一、图像处理
- 1.图像去噪
- 2.图像锐化
- 3.边缘提取
- 4.特征匹配
- 二、matlab实现
- 三、总程序代码
- 结语
概述
基于视觉的沙粒形状识别系统模型需要借助计算机对特征的信息处理和分析,实现像人一样的智能识别,所以通常模式识别与机器学习存在着一定的联系。机器识别技术的实现主要分为以下几个步骤:
(1) 获取图像数据。
(2) 数据预处理。
(3) 图像特征提取。
(4) 设置分类器完成分类。
基本流程为:
一、图像处理
1.图像去噪
对采集到的图像主要预处理方式为降噪处理,去除冗余信息,以提高后续特征提取的效率和准确率,使研究对象更加突出。一般采用平滑滤波来对图像进行降噪处理,平滑滤波处理是能够在保证图像细节的基础上对图像的噪声进行抑制和去除,一般对图像的预处理都采用平滑滤波的方式。图像采用中值滤波法进行平滑滤波。
2.图像锐化
图像锐化是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。
3.边缘提取
边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域,在一维空间中,类似的操作被称作步长检测。边缘是一幅图像中不同屈原之间的边界线,通常一个边缘图像是一个二值图像。边缘检测的目的是捕捉亮度急剧变化的区域。
Sobel算子结合了高斯平滑和微分求导。它是一阶导数的边缘检测算子,使用卷积核对图像中的每个像素点做卷积和运算,然后采用合适的阈值提取边缘。Soble算子有两个卷积核,分别对应x与y两个方向。
4.特征匹配
在对图片进行颜色提取和形状特征提取后,根据图片中轮廓信息以及颜色、形状信息对圆形米粒以及椭圆形米粒进行识别,并计算每种米粒的数量。
二、matlab实现
以下是一个简单的流程:
读取图像:使用imread函数读取米粒图像。
img = imread('rice.png');
预处理图像:对图像进行预处理,例如灰度化、二值化、滤波等操作。
gray_img = rgb2gray(img); % 转换为灰度图像
bw_img = imbinarize(gray_img); % 二值化
filter_img = medfilt2(bw_img, [3, 3]); % 中值滤波
分割图像:将图像中的米粒分割出来,可以使用形态学操作、边缘检测等方法。
se = strel('disk', 5); % 创建一个半径为5的圆形结构元素
open_img = imopen(filter_img, se); % 开运算去除小物体
bw_img2 = edge(open_img, 'canny'); % 边缘检测
se2 = strel('disk', 3); % 创建一个半径为3的圆形结构元素
dilate_img = imdilate(bw_img2, se2); % 膨胀处理
region_img = regionprops(dilate_img, 'Area', 'Centroid'); % 获取连通区域属性
统计米粒数量:统计米粒的数量,可以根据分割出来的连通区域数量来估算米粒数量。
num_rice = length(region_img); % 统计米粒数量
三、总程序代码
代码如下(示例):
clc
clear all
close all
A1 = imread('./1.jpg'); % 读入图像
A1=rgb2gray(A1); %将彩色图转化为二维的灰度图
I1=im2double(A1);
a=zeros(1,9);
c=zeros(1,9);
I5=I1;
I2=I1;
[row,col]=size(I1);
for i=2:row-1for j=2:col-1a=[I2(i,j),I2(i-1,j),I2(i+1,j),I2(i,j-1),I2(i,j+1),I2(i-1,j-1),I2(i-1,j+1),I2(i+1,j-1),I2(i+1,j+1)];b=sort(a);I5(i,j)=b(5);end
end %%
close all
clear all
clcimg=imread('./1.jpg');I = rgb2gray(img);
% Sobel锐化
% g(i,j)=[dx(i,j)^2+dy(i,j)^2]^(1/2);
% dx = [-1 -2 -1;0 0 0;1 2 1]; dy = [-1 0 1;-2 0 2;-1 0 1];% 输入原始图像
im = double(I);H1 = [-1 -2 -1;0 0 0;1 2 1]; dx = filter2(H1,im);
H2 = [-1 0 1;-2 0 2;-1 0 1]; dy = filter2(H2,im);im2 = sqrt(dx.^2 + dy.^2); % .^2:矩阵中的每个元素都求平方
figure,imshow(uint8(im2));title('Sobel锐化所得的图像');im3 = im + sqrt(dx.^2 + dy.^2)*0.1;
figure,imshow(uint8(im3));title('锐化所得的图像');BW5=edge(uint8(im3),'canny'); %用canny算子进行边缘检测se90=strel('line',3,3);
se0=strel('line',3,3);
BW2=imdilate(BW5,[se90,se0]);
figure,imshow(BW2);[labeled,numObjects] = bwlabel(BW2,4);
BW3=imfill(BW2,'holes');
[label,num]=bwlabel(BW3,4)
figure,imshow(BW3);
figure;subplot(1,2,1), imshow(I);title('原图');subplot(1,2,2), imshow(BW5);title('canny');
annotation('textbox',[.9 .5 .1 .2],num,'EdgeColor','none')
figure;
subplot(1,2,1),imshow(I1),title('原图','fontsize',16);
subplot(1,2,2),imshow(I5),title('中值滤波','fontsize',16);
结语
需要注意的是,以上代码只是一个简单的示例,具体的实现方法和参数设置需要根据具体的图像和应用场景来调整和优化
图像形状及数量识别(matlab实现)相关推荐
- 基于matlab的图像形状与分类毕业设计(含源文)
基于matlab的图像形状与分类 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务 ...
- 基于matlab的图像形状与分类的方法比较
基于matlab的图像形状与分类的方法比较 分类就是根据被识别对象的若干特征将其归入某一类别. 形状特征 (一)特点:各种基于形状特征的检索方法都可以比较有效地利用图像中感兴趣的目标来进行检索,但它们 ...
- 【水果识别】基于计算机视觉实现橙子数量识别含Matlab源码
1 简介 在现实生活中成人识别水果是十分简易的但对于幼儿来说在没有实物之前是无法识别水果的,因此本文设计了一个简易水果识别系统为幼儿在电子设备上识别水果提供可能.本文通过matlab GUI设计了一个 ...
- matlab中caitu_tiqu,车牌识别matlab语音版+OpenCV版+测试图像和设计文档
[实例简介] 该文件包含了车牌识别的两个版本:matlab语音版+OpenCV版,有丰富的测试实例和文档信息,测试结果能满足大部分的车牌识别. [实例截图] [核心代码] 5d61aaaa-2457- ...
- 基于深度学习的手写数字识别Matlab实现
基于深度学习的手写数字识别Matlab实现 1.网络设计 2. 训练方法 3.实验结果 4.实验结果分析 5.结论 1.网络设计 1.1 CNN(特征提取网络+分类网络) 随着深度学习的迅猛发展,其应 ...
- bp神经网络数字识别matlab,matlab神经网络字母识别
MATLAB平台下的汉字识别 . <Visual+C++_MATLAB图像处理与识别实用案例精选>程序代码说明P0201:MATLAB赋值P0202:MATLAB中的for循环P0203: ...
- CV:cv2实现检测几何形状并进行识别、输出周长、面积、颜色、形状类型
CV:cv2实现检测几何形状并进行识别.输出周长.面积.颜色.形状类型 目录 输出结果 实现代码 输出结果 实现代码 # -*- coding: utf-8 -*-#OpenCV实现检测几何形状并进行 ...
- OpenCV与图像处理学习十二——图像形状特征之HOG特征
OpenCV与图像处理学习十二--图像形状特征之HOG特征 一.图像特征理解 1.1 颜色特征 1.2 纹理特征 1.3 形状特征 1.4 空间关系特征 二.形状特征描述 2.1 HOG特征 2.1. ...
- 机器视觉及图像处理系列之二(C++,VS2015)——图像级的人脸识别(1)
机器视觉及图像处理系列之二(C++,VS2015)--图像级的人脸识别(1) 接上一篇,一切顺利的话,你从github上clone下来的整个工程应该已经成功编译并生成dll和exe文件了:同时,Ima ...
最新文章
- linux c时间戳转换,Android C/C++代码中将时间戳转换为标准时间
- CVPR2020人脸防伪检测挑战赛冠军方案开源
- 大多数人都不知道,人类基因组正在衰败
- 软件测试中7个令人匪夷所思的真理
- 按键防抖_单片机用一个IO口采集多个按键信号
- OpenGL计算着色器
- linux网络编程之用一张图片说明套接口常用函数
- dba_segments和dba_tables的不同
- asp.net 多条件查询
- proteus网络编号
- Qt Designer界面简介
- EXCEL数据行数达上线,读取发生错误
- 组图:释放性感诱惑 内地超级豪放女星大盘点
- python编程长方形面积公式_求长方形面积-题解(Java代码)
- element UI 学习
- 前端维护项目该怎么做呢
- JSH_ERP华夏ERP开发配置
- VLC初始加载优化:avformat_find_stream_info接口延迟降低
- 为仿真器添加eCos多线程调试支持,GDBServer Extender 0.0.1 使用说明
- 【iOS】MVC设计模式