代码中有好多部分功能,读者可以自行标注,有用scatter3显示点云,图片腐蚀膨胀,点云凸包和凸包面积等计算等。
%%%显示点云
clear
close all;
clc
A=load("G:\实验数据\实验数据\大豆\大豆9.6\H\H-1\1.txt"); %载入反面点云数据
x1=A(:,1);
y1=A(:,2);
z1=A(:,3);
R1=A(:,4);
G1=A(:,5);
B1=A(:,6);
P1=[x1,y1,z1];
h1=[R1,G1,B1];
figure; %显示原始点云
scatter3(x1,z1,y1,5,h1/255,'fill'); %按照y轴显示颜色,就会出现渐变
axis([-0.4 0.4 0.6 1.6 -0.3 0.4]);%倒数第二个原来是-0.3
% A=load("G:\实验数据\实验数据\大豆\大豆8.18\H\H-2\1.txt"); %载入反面点云数据
% x1=A(:,1);
% y1=A(:,2);
% z1=A(:,3);
% R1=A(:,4);
% G1=A(:,5);
% B1=A(:,6);
% P1=[x1,z1];
% h1=[R1,G1,B1];
% dt = delaunayTriangulation(P1);
% triplot(dt)
% fe = freeBoundary(dt)';
% hold on
% plot(P1(fe,1),P1(fe,2), '-r', 'LineWidth',2)
% hold off
%
% K = convhull(x1,z1,y1);
% trisurf(K,x1,z1,y1,'Facecolor','cyan')
%凸包
% K1 = convhull(x1,y1,z1);
% subplot(1,2,1)
% defaultFaceColor = [0.6875 0.8750 0.8984];
% trisurf(K1,x1,y1,z1,'Facecolor',defaultFaceColor)
% axis equal
% title(sprintf('Convex hull with simplify\nset to false'))
%
% K2 = convhull(x1,y1,z1,'simplify',true);
% subplot(1,2,2)
% trisurf(K2,x1,y1,z1,'Facecolor',defaultFaceColor)
% axis equal
% title(sprintf('Convex hull with simplify\nset to true'))
data1=load('G:\实验数据\实验数据\大豆\大豆7.12\H\H-1\A.mat');
kk=length(data1.k1)+length(data1.k2)+length(data1.k3);%将mat文件里的三片点云和成同一个文件,不分开存储。
x1=zeros(kk,1);
y1=zeros(kk,1);
z1=zeros(kk,1);
x1 = data1.k1(:, 1);
y1 = data1.k1(:, 3);
z1 = data1.k1(:, 2);
j=length(x1)+1;
m=j+length(data1.k2)-1;
x1(j:m,1) = data1.k2(:, 1);
y1(j:m,1) = data1.k2(:, 3);
z1(j:m,1) = data1.k2(:, 2);
j=length(x1)+1;
m=j+length(data1.k3)-1;
x1(j:m,1) = data1.k3(:, 1);
y1(j:m,1) = data1.k3(:, 3);
z1(j:m,1) = data1.k3(:, 2);
pcdata=[x1 y1 z1];
P1=[x1,y1];
dt = delaunayTriangulation(P1);
triplot(dt)
%#凸包面积
area=abs(trapz(x1,y1))%面积
shp1 = alphaShape(x1,y1,z1,0.003,'HoleThreshold',10);
% plot(shp1);
tla1=surfaceArea(shp1)%%叶面积
LAI=tla1/area
%图像处理
% A=imread('H:\6.28H-1.tif');
% B= im2bw(A);
% imshow(B);
% import cv2
% import numpy as np
% import matplotlib.pyplot as plt
%
% % 因为图像太大,做运算效果不明显,所以先resize到小尺寸
% img = imread('H:\6.28H-1.tif', 0);
% % 得到一个5x5的矩形结构元
% kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5));
% iterations = 10 %执行开闭运算的次数
% open_res = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations)
% close_res = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations)
%
% plt.subplot(1,3,1)
% plt.imshow(open_res, cmap=plt.cm.gray)
% plt.title("open 10 iter")
%
% plt.subplot(1,3,2)
% plt.imshow(img, cmap=plt.cm.gray)
% plt.title("img")
%
% plt.subplot(1,3,3)
% plt.imshow(close_res, cmap=plt.cm.gray)
% plt.title("close 10 iter")
% plt.show()
% bw = imread('H:\6.28H-1.tif');%载入要处理的图像
% se = strel('line',15,15); %创建线形Strel对象
% bw2 = imdilate (bw, se);%膨胀图像
% B= im2bw(bw2);
% imshow(bw), title('原图像');
% figure,imshow(bw2), title('膨胀图像')
% figure,imshow(B);