基于MATLAB的阔叶树叶片智能识别

来源:互联网 发布:arm体系架构与编程 编辑:程序博客网 时间:2024/04/20 22:10

基于MATLAB的阔叶树叶片智能识别

根据叶片的形状(椭圆长轴短轴比)可以初步判断树种,为智能识别打下基础。本文方法是基于MATLAB的图像处理工具和数值计算功能。

(1)叶片照片的预处理,利用PS去掉背景。


(2)图像处理,彩色图像转灰度图像



MATLAB程序:

clear allInputImage=imread('E:\leaf_2012.jpg'); %读入要处理的图像figure(1)GrayImage=rgb2gray(InputImage);% 将图像转换为灰度图像imshow(GrayImage) % 显示使用matlab自带sobel水平算子得到的图片GrayImage=double(GrayImage); % 把图像变为双精度图像类型[m n]=size(GrayImage); %图像的大小(长和宽)g=zeros(m,n); %定义一个大小为S的空矩阵for i=2:m-1   for j=2:n-1if GrayImage(i-1,j-1)>225        g(i,j)=0;       else       g(i,j)=255;       endendend  %边缘像素的操作g(1,:)=0;g(:,1)=0;g(m,:)=0;g(:,n)=0;figure(2)SFImage=uint8(g);% 显示滤波后的图像imshow(SFImage)figure(3)imshow(InputImage)

(3)灰度图转二值图,然后边缘锐化,椭圆方程拟合




MATLAB程序:

TwoImage=im2bw(GrayImage);% 将灰度图像转换为二值图像B=edge(TwoImage);%读取椭圆边界,TwoImage是二值图像C=bwboundaries(B);D=C{1,1};%获得椭圆边界坐标row=length(D);%椭圆边界点的个数,超定方程组的方程个数% 设出圆锥曲线方程F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);%椭圆一般方程% 离散数据点Up=xlsread('E:\\Up.xls');%excel文件路径UpX=D(:,1);UpY=D(:,2);% p0系数初值p0=[1 1 1 1 1 1];warning off% 拟合系数,最小二乘方法[p,deta]=nlinfit(Up,zeros(size(Up,1),1),F,p0);plot(UpX,UpY,'r.');hold on;UpMinx=min(UpX);UpMaxx=max(UpX);UpMiny=min(UpY);UpMaxy=max(UpY);% 作图ezplot(@(x,y)F(p,[x,y]),[-1+UpMinx,1+UpMaxx,-1+UpMiny,1+UpMaxy]);title('曲线拟合');legend('样本点','拟合曲线');



(4)根据长轴短轴比判断叶子种类

长轴、短轴计算

MATLAB程序:

p=p./p(6);  xc=(p(2)*p(5)-2*p(3)*p(4))/(4*p(1)*p(4)-p(2)^2);%求椭圆中心坐标  yc=(p(2)*p(4)-2*p(1)*p(5))/(4*p(1)*p(4)-p(2)^2);%求椭圆中心坐标  angle=(1/2)*atan(p(2)/(p(1)-p(3)))%求椭圆倾斜角度  a=sqrt(2*(p(1)*xc^2+p(3)*yc^2+p(2)*xc*yc-1)/(p(1)+p(3)+((p(1)-p(3))^2+p(2)^2)^(1/2)))%求椭圆长轴  b=sqrt(2*(p(1)*xc^2+p(3)*yc^2+p(2)*xc*yc-1)/(p(1)+p(3)-((p(1)-p(3))^2+p(2)^2)^(1/2)))%求椭圆短轴  u=(a-b)/a%计算椭圆扁率
                                             
0 0
原创粉丝点击