yczhu171018的个人博客分享 http://blog.sciencenet.cn/u/yczhu171018

博文

土壤粗糙度仪的制作、粗糙度试验测量及图片数字化

已有 6176 次阅读 2017-10-19 09:53 |个人分类:试验|系统分类:科研笔记

均方根高度(RMS Height)和相关性长度(Correlation Length)是描述土壤粗糙度的两个主要参数。因此,试验目标就是通过实地测量土壤表层的高度起伏,来求取以上两个参数。本次试验采用直接接触法测量土壤剖面起伏,直接接触式测量的优点是仪器制作材料易得,制作过程简单,测量结果可达到较高的精度(1~2mm)。

1. 土壤粗糙度仪的制作
1) 刻度板购买
首先,需要找到一个带有刻度的板子,板子长度1米左右为宜。这里,我们选用可得优A1尺度刻度板(长87cm × 高60cm),某东可购:https://item.jd.com/16504647841.html,89元。

preview

可得优刻度板(A3)
2)制作工具
  • 长度4米的木条一根(3cm×2cm),松木为宜,轻重合适,结实耐用,当地的五金店一般有售,成本,~10元;

  • 截取木条的钢锯,五金店、网上皆有售,成本~15元;

  • 固定切割板的螺丝钉,20mm为宜,30个左右,成本~10元;

  • 一字(6个)和直角(4个)角码,用于固定木架,成本~10元;

  • 免钉胶,用于粘合木板和切割板,成本~20元;

3)需要注意的问题
  • 去除切割板上方没有刻度的部分(小刀或钢锯),这样可以更好地将刻度板埋入土壤中;

  • 根据切除后的切割板尺寸,截取木条,制作固定框架(建议两横三竖),并使用钉子和角码固定;

  • 将免钉胶涂在框架上方,粘和刻度板后,再使用钉子固定;


2. 试验测量
1)测量时需要的仪器,制作好的粗糙度测量板,水平尺(某东上有售:https://item.jd.com/11846748666.html,75元内),照相机(最好带有三角架);
2)在田间测量粗糙度时,测量板下侧应充分埋入土中,同时,使用水平卡尺使测量板保持水平和垂直;

3)照相时,应尽量使相机的格网线和粗糙度的横线保持水平,照相距离保持在1~2m;


3. 数字化测量结果
完成照片拍摄后,如何完成数字化,获取较高精度的高度数据也十分重要。本实验中,数字化工作在matlab中编程完成,数字化过程简单,易操作。程序的主要步骤如下:
1) 读取图片,鼠标输入两个点,确定作图区域,放大后的图如下;

2) 然后利用鼠标,沿测量板的某条横线画点(从0cm开始,87cm处结束,中间可任意刻画),描述图片的水平变形(拍摄时相机不水平);
3) 然后利用鼠标输入两点,两点垂直分布,距离为1厘米,以计算每厘米代表的像素数;
4) 然后利用鼠标描述土壤剖面的变化,横向间隔可大可小,建议每厘米输入一个,注意:从0cm处开始,87cm处结束;
5) 根据高度随水平的变形数据、每厘米代表的高度值,计算鼠标输入土壤剖面代表的高度值;
6) 具体计算程序如下,有问题发邮箱,zhuyongchao10@163.com

clear, clc
% 图片所在文件夹路径,可修改
dir = 'E:\土壤粗糙度\20171014_1st_selected\';
filename = uigetfile('*.JPG','Pick a file',dir);
roughness_picture = importdata([dir filename]); % 导入数据
%% 选出画图区域,并放大至该区域
% 获取屏幕分辨率
screensize = get(0,'ScreenSize');
% 最大化图片
figure('position',screensize)
imagesc(roughness_picture);
% 输入两点确定画图区域
uiwait(msgbox('请选择输入两个点,以确定画图区域'));
p = ginput(2);
% 放大区域的四个角
sp(1) = min(floor(p(1)), floor(p(2))); %xmin
sp(2) = min(floor(p(3)), floor(p(4))); %ymin
sp(3) = max(ceil(p(1)), ceil(p(2))); %xmax
%% 1. 读取图片
sp(4) = max(ceil(p(3)), ceil(p(4))); %ymax
% 获取该区域数据并显示图像
MM = roughness_picture(sp(2):sp(4), sp(1): sp(3),:);
imagesc(MM);
%% 确定照片倾斜度
uiwait(msgbox('请沿土壤轮廓上方的横线画点,以描述图片变形!'));
% 第一个点从0点起,最后一个点在87结束,中间可以任意n个点
[x_pix1,y_pix1] = ginput();
% 插值为88个点(0-87),方法为样条函数
x_intp = x_pix1(1):(x_pix1(end)-x_pix1(1))/87:(x_pix1(end));
y_intp = interp1(x_pix1,y_pix1,x_intp,'spline');
%% 请输入两点以确定,每厘米代表的高度值
uiwait(msgbox('请输入两点,以确定每厘米高度代表的像素值'))
[x_pix3,y_pix3] = ginput(1); % 起点(0,N)
[x_pix4,y_pix4] = ginput(1); % 终点(87,N)
% 每厘米高度代表的像素数
pixs_perH = abs((y_pix4 - y_pix3));
%% 输入土壤剖面:第一个点为0,最后一个点为87
% 数字化土壤剖面,可任意间隔画点,建议每厘米画一个点
uiwait(msgbox('输入土壤剖面:从第一行,最后一行结束'))
[x_pixs,y_pixs] = ginput;
%% 调整照片倾斜度,并转化为高度值,注意:高度值计算以地上剖面最低点为0点,而非刻度板的0点
% 计算每厘米长度代表的像素数,板子长为87厘米
pixs_perL = (x_pixs(end) - x_pixs(1))/87;
% x轴像素换算为长度
x_lengths = (x_pixs - x_pixs(1))/pixs_perL;
% 调整像素高度变形
y_intp2 = interp1(x_intp,y_intp,x_pixs,'spline'); % 获取输入点对应的y轴变形
y_dif = y_intp2(1:end) - y_intp2(1); % 不同点处的变形(相对0点)
y_pixs_ad = y_pixs - y_dif; % 修正变形后的像素高度值
% y轴像素换算为高度值(cm),以土壤剖面最低点为0点
y_heights = -(y_pixs_ad - max(y_pixs_ad))/pixs_perH;
figure('position',screensize)
plot(x_lengths,y_heights)
%% 保存数字化结果
dir_result = [dir,'20171014_results\']; % 结果保存文件
if ~isdir(dir_result)
mkdir(dir_result)
end
save([dir_result filename(1:end-4),'.mat'],'x_lengths','y_heights')




https://blog.sciencenet.cn/blog-3367669-1081495.html


下一篇:SNAP提取哨兵1号SAR数据的入射角
收藏 IP: 106.120.73.*| 热度|

2 信忠保 尤明庆

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 15:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部