您现在的位置是:主页 > news > iis 手机网站/杭州网站seo公司

iis 手机网站/杭州网站seo公司

admin2025/5/3 21:55:21news

简介iis 手机网站,杭州网站seo公司,工作流软件,网站上内容列表怎么做在这篇文章里面我们要做的事情全部都围绕两个问题,一个图像当中有多少个 xxx,他们的大小是多少,举个例子上图是一个米的影像,这张图片里有很多的米,现在我们的问题是,这里面有多少米,他们的大小…

iis 手机网站,杭州网站seo公司,工作流软件,网站上内容列表怎么做在这篇文章里面我们要做的事情全部都围绕两个问题,一个图像当中有多少个 xxx,他们的大小是多少,举个例子上图是一个米的影像,这张图片里有很多的米,现在我们的问题是,这里面有多少米,他们的大小…

在这篇文章里面我们要做的事情全部都围绕两个问题,一个图像当中有多少个 xxx,他们的大小是多少,举个例子

88f880a69101108cb04e2e483a3fa8a2.png

上图是一个米的影像,这张图片里有很多的米,现在我们的问题是,这里面有多少米,他们的大小是多少?

graythresh() & im2bw()

要回答上述两个问题,首先要做的是对影像进行预处理,第一步就是对图像进行阈值化处理。所谓阈值化处理就是当灰度值低于一个值(阈值)时,让其成为一个小的值,当灰度值大于一个值(阈值)时,让其成为一个大的值,即实现了阈值分割,这样图像就黑白分明,对比度增大

所以我们首先要找到阈值,才能进行阈值化处理,matlab 为我们提供了两个函数:graythresh():使用最大类间方差法找到图片的一个合适阈值,其调用格式为:level = graythresh()

im2bw():使用阈值变换法把灰度图像转换成二值图像,所谓二值图像就是只有0(纯黑)、255(纯白),其调用格式为:bw = im2bw(I,level),其中 I 是原图像对应矩阵,level 是阈值I = imread('rice.png');

level = graythresh(I);

bw = im2bw(I,level);

subplot(1,2,1);imshow(I);

subplot(1,2,2);imshow(bw);

ba4f99d82fce5b5b9852c3c53ba3b879.png

看上面的图,其实还没有达到想要的效果,因为有的米在处理的时候直接消失了,还有的变成了很多小颗粒,这些都会影响我们的结果。究其原因,原图的背景本身就不是很均匀,中间部分比较亮,下半部分比较暗,所以我们要想办法去掉背景(background subtraction)

background subtraction

要想去掉背景,首先得把背景分离出来,这里用到一个函数imopen()I = imread('rice.png');

subplot(1,3,1);imshow(I);

BG = imopen(I,strel('disk',15));

subplot(1,3,2);imshow(BG);

I2 = imsubtract(I,BG);

subplot(1,3,3);imshow(I2);

187fc8c47fd88dfbcdf54d96420079bd.png

现在就可以将去掉背景以后的影响在做阈值化处理

6a1b64af9ddb83ded08e843e3b038a4b.png

下面我们就是要想办法让计算机去“数”有多少颗米,这说起来可能比较难,但是我们先分析图上,怎么样算是一颗米,不妨看一下 bw 的矩阵

bba3d5c8da4ec665be8515e8844d19b6.png

因为矩阵太大,所以我随便节选了一个部分,经过阈值化处理之后,矩阵内只有 0 和 1,0 表示黑,1 表示白,我们的影像也是这样,米是白的,所以我们可以看到,在矩阵中,连续的一段区域内都是 1,也就表示这是一颗米,当然这个类似于搜索的算法,不需要我们写,matlab 为我们提供了函数bwlabel

bwlabel()

调用格式:L = bwlabel(bw,n),返回一个和 bw 大小相同的矩阵 L,包含了标记 bw 中每个连通区域的类别标签,这些标签的值为 1、2......num(连通区域的个数),n 的值为 4 或 8,表示是按 4 连通寻找还是按 8 连通寻找。4 连通是指,如果像素的位置在像素相邻的上、下、左、右,则认为他们是连通的。8 连通是指,如果像素的位置在像素相邻的上、下、左、右、左上角、左下角、右上角、右下角,则认为他们是连通的I = imread('rice.png');

BG = imopen(I,strel('disk',15));

I2 = imsubtract(I,BG);

level = graythresh(I2);

bw = im2bw(I2,level);

[labeled,num] = bwlabel(bw,8);

计算出来的结果,num 是 99,所以图上一共有 99 颗米

label2rgb()

label2rgb()函数是将一个影像转换成rgb彩色I = imread('rice.png');

BG = imopen(I,strel('disk',15));

I2 = imsubtract(I,BG);

level = graythresh(I2);

bw = im2bw(I2,level);

[labeled,num] = bwlabel(bw,8);

rgb_label = label2rgb(labeled);

imshow(rgb_label)

92cf2c5e89d529d5f3db0fc2ef1e73d3.png

bwselect()

这个函数能够让用户与影像产生交互I = imread('rice.png');

BG = imopen(I,strel('disk',15));

I2 = imsubtract(I,BG);

level = graythresh(I2);

bw = im2bw(I2,level);

obj = bwselect(bw);

imshow(obj)

把鼠标移到图上,随便点击几颗米,然后摁一下鼠标右键,图上就会只剩你点击的几颗米

40fa4c9369061eb9ba5ed303a1315696.png