写这篇文章目的:
文章的课题是我期末的数字图像处理大报告。大家可以根据自己的需求,对于每个不同的处理方法,进行学习~
当然文章基于我个人的观点以及参考了一些大神们的写法,如有不对的地方,欢迎大家指正~
解决问题的思路分析:
如何读入图像 - > 如何减少图片当中的无用信息 - > 如何进行计数 - > 如何解决粘连在一起的大米
在网上随意找了一张大米的图片:
<说明> 将图片存为".png"
读入图像的方式:
<1>方法一:仅读入一张图片
应用:图片数量较少
缺点:要随时自己填写后面的路径位置
i=imread('E:\数字图像\rice1.png');
<2>方法二:单独读入一个文件夹,在文件夹当中找寻目标图片
好处:可以一次性处理多张图片
[filename,filepath]=uigetfile('.png','输入一个大米的图像');
file=strcat(filepath,filename);
i=imread(file);
*注意* 自己在写读入的时候需要注意文件格式
<说明> 当时在写的时候没有用第二种,只用了第一种写法
减少图片当中的无用信息——图像灰度化、图像二值化
当时做这一块的时候,给我参考比较大的博客,大家可以看看这个:
就不在这里就具体说内容啦~
欢迎大家和我讨论哦~
如何进行计数呢?
首先先来介绍几个知识点(敲黑板啦~)
腐蚀:
a.消除边界点
b.使边界向内部收缩的过程
c.可以用来消除小且无意义的物体
膨胀:
a.与物体接触的所有背景点合并到该物体中
b.使边界向外部扩张的过程
c.可以用来填补物体中的空洞
开运算:
a.先腐蚀后膨胀的过程开运算
b.用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变面积
c.在需要去除小颗粒噪声,以及断开目标物之间粘连时使用
d.其主要作用与腐蚀相似,与腐蚀操作相比,具有 可以基本保持目标原有大小不变的优点
闭运算:
a.先膨胀后腐蚀的过程称为闭运算
b.用来填充物体内细小空洞、连接邻近物体
c.平滑其边界的同时并不明显改变其面积
对于本课题处理粘连的大米的思路:闭运算->开运算
对于计数:
调用这个函数:L = bwlabel(BW,n)
关于这里的详细内容,大家可以看看TA的:
<补充说明> imshow():方法将值标准化为0到1之间的值
下面就是最后的代码啦~
i=imread('E:\数字图像\rice1.png');
i1=rgb2gray(i); %转灰度图像
i2=im2bw(i1); %二值化
i3 = bwmorph(i2,'close'); %闭运算
imshow(i3)
i4 = bwmorph(i2,'open'); %开运算
figure, imshow(i4)
[L,amount]=bwlabel(i4,8);
fprintf('共有%d个大米!',amount);
运行截图:
说的不对的地方,欢迎大家讨论~
大家有想看原版报告的可以和我私聊嗷~