Matlab:凸包面积

代码中有好多部分功能,读者可以自行标注,有用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);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值