如何将遥感图像读为Emgucv的Image<gray,float>形式
来源:互联网 发布:商业公司顶级域名是 编辑:程序博客网 时间:2024/06/05 12:49
基于VS2010的遥感图像处理,我们通常将遥感图像读为Emgucv中的Image<gray,float>形式。故处理遥感常用的库有Emgucv(基于.NET的opencv)和GDAL(GDAL提供对多种栅格数据的支持)库。
1、GDAL读取遥感数据
GDAL库是一个跨平台的栅格地理数据格式库,包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。
GDAL常用的读取遥感数据的函数:
OSGeo.GDAL.Gdal.AllRegister();//对所有支持的文件格式进行注册
采用GDAL读取图像成功后,可以获取图像的一些基本信息,如下:
描述信息:const char* GDALDataset::GetDriver()->GetDescription(),通常是图像的格式
图像大小: 图像宽度 int GDALDataset::GetRasterXSize()
图像高度 int GDALDataset::GetRasterYSize()
波段数:int GDALDataset::GetRasterCount() 波段数即图像每个像素点所含的颜色种类,物理中的光学中学过颜色就是某频率的光波。波段少则一个,多则很多个,在遥感影象中波段通常有多个。
投影信息:GDALDataset::GetProjectionRef() 有的图像没有投影信息,不如一般的JPG、BMP格式图像。
地理坐标信息:double adfGeoTransform[6]
GDALDataset::GetGeoTransform(adfGeoTransform)
地理坐标信息是一个含6个double型数据的数组,adfGeoTransform[1]和adfGeoTransform[5]表示东西和南北方向一个像素对应的距离,adfGeoTransform[0]和adfGeoTransform[3]表示左上角的坐标。
波段信息:数据集中重要的信息,有波段尺寸、数据类型、颜色信息等。
获取波段的方法: GDALRasterBand *poBand;
poBand = poDataset->GetRasterBand(i) poBand为指向第i个波段的指针
波段尺寸:int poBand->GetXSize()
int poBand->GetYSize()
数据类型:const char* GDALGetDataTypeName(poBand->GetRasterDataType())
颜色信息:const char* GDALGetColorInterpretationName(poBand->GetColorInterpretation())
2、读取遥感数据到Image<gray,float>中//从原图像数据中读取需要的数据到托管数组中 float[] buffer = new float[roi.Width * roi.Height]; srcBand.ReadRaster( roi.X, roi.Y, roi.Width, roi.Height, buffer, roi.Width, roi.Height, 0, 0); //分配非托管内存 IntPtr myPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal( System.Runtime.InteropServices.Marshal.SizeOf(buffer[0]) * buffer.Length); //将托管数组中的数据赋值到非托管内存中 System.Runtime.InteropServices.Marshal.Copy(buffer, 0, myPtr, buffer.Length); //利用非托管内存创建EmguCV的Image类的对象,并将数据复制到托管内存中 Image<Gray, float> srcImg = new Image<Gray, float>( roi.Width, roi.Height, System.Runtime.InteropServices.Marshal.SizeOf(buffer[0]) * roi.Width, myPtr) .Copy(); //释放从进程的非托管内存中分配的内存 System.Runtime.InteropServices.Marshal.FreeHGlobal(myPtr);
- 如何将遥感图像读为Emgucv的Image<gray,float>形式
- 如何将GTiff格式的遥感图像转换为OpenCV可以读取的格式
- 八、EmguCV读取图像,并用WPF的Image控件显示
- 【图像处理】C++将读取图像并将图像转换为矩阵的形式
- Java中如何根据图片文件创建Image对象,且将Image对象保存为文件形式
- 如何将float转换为string
- 如何将float转换为string(ZZ)
- 如何将float转换为string
- 如何将float转换为string
- 【图像处理】灰度图(Gray Scale Image)
- EmguCV的C#图像处理
- 将putty移植为DLL的形式
- 如何将String转换为unicode形式的char(即/uxxxx)?
- Excel表中如何将常规数字批量转换为以文本形式存储的数字?
- 如何将double型数值转换为16进制的形式
- 如何将word在网页中展现为HTML的形式---Openoffice方式
- Java中如何将以byte数组给出的数据转换为double数组形式
- 如何将原始SNP信息转化为0,1,2的矩阵形式
- 7 - 更多字符串和特殊方法
- 省市联动 DropDownList控件
- SIMCOM最近推出4G+MIFI功能模块
- Android UI开发第二十四篇——Action Bar
- 取消UITableViewCell的选中状态
- 如何将遥感图像读为Emgucv的Image<gray,float>形式
- Java中如何读写cookie
- linux 查找目录或文件
- BZOJ 2090 [Poi2010]Monotonicity 2 DP+线段树
- 设计模式-组合模式
- 【bzoj3732】 network 最小生成树+lca
- Unity3D中世界坐标转换到NGUI坐标
- Hbase过滤器(一)
- MY BLOG