基于数字图像处理技术测定植物叶片属性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于数字图像处理技术测定植物叶片属性

一、实验名称:基于数字图像处理技术测定植物叶片属性。

二、实验目的

1.掌握并熟练使用matlab R2014b软件;

2.采用合适的分割方法对原图片进行图像分割,获取目标叶片;

3.将分割后的图片进行去噪增强处理;

4.通过matlab软件来测定目标叶片的属性;

5.通过手工网格法计算出目标叶片实际属性,并与实验结果对比修改。

三、实验原理

实验通过手动网格法测出叶片实际面积值,并与通过matlab图像处理计算出的实验面积值对比,研究测试运用matlab图像处理技术提取叶片面积的可行性。

实验中,将已知属性的小方格(1cm*1cm)作为参照物与所测叶片置于同一平面的白纸上,用手机相机获取图像。由于数字图像都是由一个个像素点组成,可以根据像素点比例和参照物属性求出植物叶片属性。

叶片面积计算公式如下:Array

式1:叶片面积 = 参照物面积

叶片周长计算公式如下:

式2:叶片周长 = 参照物周长

四、实验步骤

(1)网格测面积

手工制作网格纸一张(最小格边长5mm),将叶片轮廓描于纸上,计算轮廓所占方格数(未占满格的均按半格计算),得出实际面积约为24cm2。用一根细线围绕叶子一周,然后拉直,测其周长为22.2cm。

图1:获取的原图片(黑方格为参照物)

图2:网格法求叶片实际面积

(2)matlab图像处理提取叶片属性

1、图像灰度处理

图3:灰度图像 2、中值滤波

图4:中值滤波

3、二值化

图5:二值化图像4、颜色反转

5、提取边缘

6、填补边缘空隙

7、图像切割

对分割后的图像进行图像切割,平均分为三份(如图6、7)。

图6:切割后的叶片图像

图7:切割后的参照物图像

8、分别计算目标叶片和参照物图像的像素数

由于分割后的图像均为二值图像(0和255),所以目标叶片和参照物图像的像素数可以运用sum()函数列出以下式子得出:

参照物像素数=sum(sum(参照物图像))/255;

目标叶片像素数=sum(sum(目标叶片图像))/255;

9、分别计算目标叶片和参照物的实验周长

首先运用bwconncomp函数分析滤波后图像的连通域个数,然后运用regionprops函数计算各连通域周长。

五、结论分析

通过式1、式2得出叶片实验面积为:23.626692 cm2、周长21.697166cm。

图8:实验结果截图

与网格法得出的实际面积约为24 cm2对比,误差为0.37 cm2,周长的误差则为0.5cm,误差较小,可以接受。

六、实验代码

a=imread('leaf.jpg');

figure,imshow(a);title('原图像');

b=rgb2gray(a);

figure,imshow(b);title('灰度图');

c=medfilt2(b);

figure,imshow(c);title('中值滤波');

level=graythresh(c);

d=im2bw(c,level);

figure,imshow(d);title('二值化');

e=imcomplement(d);

figure,imshow(e);title('颜色反转');

image1 = edge(e,'sobel');

image2 = edge(e,'roberts');

image3 = edge(e,'prewitt');

image4 = edge(e,'canny');

figure;

subplot(2,2,1);

imshow(image1);title('soble图像边缘提取')

subplot(2,2,2);

imshow(image2);title('roberts图像边缘提取')

subplot(2,2,3);

imshow(image3);title('prewitt图像边缘提取')

subplot(2,2,4);

imshow(image4);title('canny图像边缘提取')

I = strel('line',3,90);

H = strel('line',3,0);

t = imdilate(image4,[I H]);

figure,imshow(t);title('填补边缘缝隙的图像');

filled = imfill(t,'holes');

figure,imshow(filled);title('填充空隙后的图像');

SeD = strel('diamond',1);

final = imerode(filled,SeD);

final = imerode(final,SeD);

figure,imshow(final);title('平滑后的图像');

%图像平均切割为三份

[x,y]=size(final); %求图像大小

imwrite(final(1:x,round(y*2/3):y),'方块.jpg','jpg');%切割得到“方块”的图像

imwrite(final(1:x,round(y/3):round(y*2/3)),'树叶1.jpg','jpg');%切割得到“树叶1”的图像

%计算叶片和参照物的像素数,以及叶片面积

im1 = imread('方块.jpg'); %读取图像

im2 = imread('树叶1.jpg'); % 读取图像

num1=sum(sum(im1))/255;

num2=sum(sum(im2))/255;

mj=num2/num1;

fprintf('面积为 %f平方厘米\n ',mj);

cc = bwconncomp(final, 4); %4连通域

Perdata = regionprops(cc,'Perimeter');

per1=Perdata(1).Perimeter;

per2=Perdata(2).Perimeter;

Per=per1/per2*4;

fprintf('叶子周长为 %f厘米\n ',Per);

相关文档
最新文档