在tif上用matlab自动批量标记已有像素坐标的控制点,控制点文件为csv,结果用envi的椭圆注记存储,并输出结果
时间: 2024-05-13 08:20:38 浏览: 180
matlab批量打开NC文件_批量转tif
5星 · 资源好评率100%
以下是使用MATLAB和ENVI软件自动批量标记控制点并输出结果的步骤:
1. 将控制点文件(csv格式)导入MATLAB中,可以使用csvread函数读取文件内容。
2. 读取需要标记的tif影像,可以使用imread函数读取影像。
3. 对于每个控制点,使用impoint函数在tif影像上标记点,并将其坐标保存下来。
4. 将所有标记点的坐标保存为一个矩阵,可以使用getPosition函数获取每个impoint对象的位置信息,并将其保存到一个矩阵中。
5. 将保存有标记点坐标的矩阵转换为csv格式,以便后续ENVI软件使用。
6. 使用ENVI软件打开tif影像,并添加“椭圆注记”图层。
7. 在“椭圆注记”图层上,使用“添加注记”工具添加椭圆注记,并将注记的位置和大小设置为对应的控制点坐标和误差范围。
8. 将标记的椭圆注记保存为ENVI格式文件,以便后续使用。
9. 将标记的椭圆注记文件转换为其他格式,例如GeoTIFF格式,以便在其他软件中使用。
完整代码示例:
```matlab
% 读取控制点文件
control_points = csvread('control_points.csv');
% 读取tif影像
image = imread('image.tif');
% 显示影像
imshow(image);
% 遍历每个控制点,在tif影像上标记点
for i = 1:size(control_points, 1)
x = control_points(i, 1);
y = control_points(i, 2);
h = impoint(gca, x, y);
positions(i, :) = getPosition(h);
end
% 将所有标记点的坐标保存为一个矩阵
save('positions.mat', 'positions');
% 将保存有标记点坐标的矩阵转换为csv格式
csvwrite('positions.csv', positions);
% 在ENVI软件中打开tif影像,并添加椭圆注记图层
envi = enviopen('image.tif');
enviaddlayer(envi, 'Ellipse Annotation');
% 读取标记点的坐标
positions = csvread('positions.csv');
% 在椭圆注记图层上添加注记
for i = 1:size(positions, 1)
x = positions(i, 1);
y = positions(i, 2);
dx = 10; % 误差范围
dy = 10;
enviaddannotation('Ellipse', [x, y, dx, dy], envi);
end
% 保存标记的椭圆注记文件
envisaveannot('annotations.eva', envi);
% 将标记的椭圆注记文件转换为其他格式
enviannot2geotiff('annotations.eva', 'annotations.tif', envi);
```
阅读全文