植物叶片特征参数计算
hold on
rectangle('Position',[x0,y0,x1-x0,y1-y0],'edgeColor','g','LineWidth',1)
if x1-x0>=y1-y0
Pwl(i)=(x1-x0)/(y1-y0);
else
Pwl(i)=(y1-y0)/(x1-x0);
end
Pr(i)=Ar(i)/((y1-y0)*(x1-x0));
metric = 4*pi*area/perimeter^2; %结果显示
end
fprintf('圆度识别结果(越圆越接近1):%8.5f\n',metric); %?注意输出格式前须有%符号
运行结果:
附带叶片的真实轮廓(figure5),白色部分即为叶片真实轮廓
3.
程序:
RGB = imread('leaf.png');
I_gray=rgb2gray(I_rgb); %灰度化
figure,imshow(I_rgb);
figure,imshow(I_gray);
threshold = graythresh(I_gray);
bw = im2bw(I_gray,threshold);
figure,imshow(bw)
bw_i=imcomplement(bw);figure,imshow(bw_i) %图像反转
[L,num]=bwlabel(I2,8); %区域标记,
STATS=regionprops(L, 'all');
for i=1:num
area(i)=STATS(i).Area; %计算各区域的面积。
end
A=max(area);
L=imread('L2.png');
L2=im2bw(L);
[L,num]=bwlabel(L2,8); %区域标记,
3.矩形度的计算juxingdu.m
4.质心在图像上的标记zhixin.m
5.叶片叶脉的提取yemaitiqu.m
三、实验步骤
1.
在计算叶片的真实面积时,参考很多源程序,程序如下:
(1).clc;
I1=imread('leaf.png');
I2=im2bw(I1);
figure(1);
imshow(I2);
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end
%%
%计算面积
stats = regionprops(L,'Area','Centroid');threshold = 0.94; %循环处理每个边界,length(B)是闭合图形的个数,即检测到的陶粒对象个数
for k = 1:length(B) %获取边界坐标'
boundary = B{k}; %计算周长
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2))); %对标记为K的对象获取面积
area = stats(k).Area; %圆度计算公式4*PI*A/P^2
imshow(I_final_use)
t=imhist(I_gray); %直方图,用来显示分割阈值% cftool
I_bw=imcomplement(im2bw(I_gray,175/256));%二值化,175为根据imhist得到的结果
areas3=areas2/max(areas1);%面积降序排列并归一化
I_bw=im2bw(I_gray,level);
for i=1:height %%循环中进行反色
for j=1:width
if I_bw(i,j)==1
I_bw(i,j)=0;
else I_bw(i,j)=1;
end
end
end
[L,num]=bwlabel(I_bw,8);
plot_x=zeros(1,num);%%用于记录质心位置的坐标
figure;imshow(h);
%%
%中值滤波、二值化
h = medfilt2(h,[4,4]);
bw = im2bw(h,graythresh(h));
%%
%消除噪点
se = strel('disk',2);
bw = imclose(bw,se);
figure;imshow(bw);
%%
%填补闭合图形,填充色为白色
% the area enclosed by each of the boundaries
bw = imfill(bw,'holes');
figure,imshow(bw)
ed=edge(bw);
figure,imshow(ed)
%%%%%以上是图像二值化上面制作二值化图像
L = bwlabel(bw);
plot_y=zeros(1,num);
for k=1:num %%num个区域依次统计质心位置
sum_x=0;sum_y=0;area=0;
for i=1:height
for j=1:width
if L(i,j)==k
sum_x=sum_x+i;
sum_y=sum_y+j;
area=area+1;
end
end
end
plot_x(k)=fix(sum_x/area);
plot_y(k)=fix(sum_y/area);
end
figure(1);imshow(I_bw);
for i=1
hold on
plot(plot_y(i) ,plot_x(i), '*')
end
运行结果:
第二个程序运行的结果为:
bw = bwareaopen(bw,30);
% fill a gap in the pen's cap
se = strel('disk',2);
bw = imclose(bw,se);
% fill any holes, so that regionprops can be used to estimate
5.
i=imread('leaf.png');
i2பைடு நூலகம்im2double(i);
ihd=rgb2gray(i2);
[thr,sorh,keepapp]=ddencmp('den','wv',ihd);
ixc=wdencmp('gbl',ihd,'sym4',2,thr,sorh,keepapp);
k2=medfilt2(ixc,[7 7]);
isuo=imresize(k2,0.25,'bicubic');
ecanny=edge(isuo,'canny');
subplot(1,1,1);
imshow(ecanny);title('cannyËã×ÓÌáȡҶÂö');
axisongridon
提取的结果为:
四、实验总结
智商是硬伤!!!!老师请息怒!!!!这个真的不容易啊,用老师的话来说:也许放弃会是一种新的开始。。。。。。。
植物叶片特征参数计算
报告人:刘博班级:电信111学号:2011012442
一、
1.完成叶片真实面积的计算、圆度、矩形度的计算
2.完成质心在图像上的标记
3.提取出叶片的真实轮廓
4.叶片叶脉的提取
二、实验内容
编写相对应的程序实现实验目的。
程序与功能对应关系如下:
1.叶片真实面积的计算mianji.m
2.圆度的计算以及叶片的真实轮廓yuandu.m
end
fprintf('矩形度是%8.5f\n',1./Pwl); %?注意输出格式前须有%符号
4.
程序:
clear;clc;close all
I=imread('leaf.png');
I_gray=rgb2gray(I);
level=graythresh(I_gray);
[height,width]=size(I_gray);
Ar(i)=sum(bw(L==i));
perimeter(i)=sum(ed(L==i));
metric(i) = 4*pi*Ar(i)/perimeter(i)^2;
[y,x]=find(L==i);
x0=min(x(:));
x1=max(x(:));
y0=min(y(:));
y1=max(y(:));
L=bwlabel(bw_i); %图像标记
s=regionprops(L, 'area'); %计算每一个区域大面积
areas1=cat(1, s.Area); %求面积
areas2=sort(areas1,'descend');
I_final_use=bwareaopen(bw_i,areas2(2)); %去除小区域
STATS=regionprops(L, 'all');
for i=1:num
area(i)=STATS(i).Area; %计算各区域的面积。
end
B=max(area);
S=A/B*400; %求实际面积