|
XDMBandAffineTransform Class
|
XDMBandAffineTransform 클래스는 영상을 Affine 변환 수행한다.
Inheritance Hierarchy
Namespace: Pixoneer.NXDL.NRSAssembly: NXDLrs (in NXDLrs.dll) Version: 3.0.0.0
Syntaxpublic class XDMBandAffineTransform : XDMBand
The XDMBandAffineTransform type exposes the following members.
Constructors
Methods
Example
입력 영상을 Affine 변환 처리를 한다. 영상처리 후 생기는 빈 공간을 -9999로 채우며, 중심좌표를 설정하지 않았기 때문에 영상 중심좌표는 Width/2, Height/2가 된다.
using Pixoneer.NXDL;
using Pixoneer.NXDL.NRS;
using Pixoneer.NXDL.NIO;
XRasterIO RasterIO = new XRasterIO();
String strError = "";
if (RasterIO.Initialize(out strError) == false)
{
return;
}
String strFilePathLoad = "D:\\Sample\\IKONOS.xdm";
XRSLoadFile xrsFileInput = RasterIO.LoadFile(strFilePathLoad, out strError, false, eIOCreateXLDMode.All_NoMsg);
XBandParamAffineTransform InputParam = new XBandParamAffineTransform();
InputParam.SrcBand = xrsFileInput.GetBandAt(0);
InputParam.RotateAngle = XAngle.FromDegree(45);
InputParam.Scale = new XVertex2d(2.0, 2.0);
InputParam.Offset = new XVertex2d(10, 10);
InputParam.BlankValue = -9999;
XDMBandAffineTransform bandProcess = new XDMBandAffineTransform();
if (!bandProcess.SetInputParam(ref InputParam))
{
return;
}
XRSLoadFile fileLoad = RasterIO.LoadFile(strFilePathLoad, out strError, false, eIOCreateXLDMode.All_NoMsg);
XRSSaveFile fileSave = new XRSSaveFile();
for (int i = 0; i < fileLoad.NumBand; i++)
{
XDMBand bandRaw = fileLoad.GetBandAt(i);
XBandParamAffineTransform param = new XBandParamAffineTransform(ref InputParam);
param.SrcBand = bandRaw;
XDMBandAffineTransform bandTmp = new XDMBandAffineTransform();
bandTmp.BandName = bandRaw.BandName;
bandTmp.SetInputParam(ref param);
XDMBand bandCast = (XDMBand)bandTmp;
fileSave.AddBand(ref bandCast);
}
XThread thd = null;
String strFilePathSave = "D:\\Sample\\Out_AffineTransform.xdm";
if (!RasterIO.Export(ref fileSave, strFilePathSave, "XDM", out strError, thd))
{
return;
}
Affine 변환 계수를 설정해서 Affine 변환 처리를 수행한다.
XRasterIO RasterIO = new XRasterIO();
String strError = "";
if (RasterIO.Initialize(out strError) == false)
{
return;
}
String strFilePathLoad = @"F:\SampleImage\TestUseGeoTransValue\TEST1.tif";
XRSLoadFile xrsFileInput = RasterIO.LoadFile(strFilePathLoad, out strError, false, eIOCreateXLDMode.All_NoMsg);
if (!xrsFileInput.IsValidGeoTransform()) return;
double[] adfGeoTransform = new double[6] { 0, 0, 0, 0, 0, 0 };
XSpatialReference geoTransSR = new XSpatialReference();
xrsFileInput.GetGeoTransform(ref adfGeoTransform, ref geoTransSR);
double[] cx = new double[3];
double[] cy = new double[3];
Xrs.GeoTransformToWarpCoeff(adfGeoTransform, out cx, out cy);
XBandParamAffineTransform InputParam = new XBandParamAffineTransform();
InputParam.SrcBand = xrsFileInput.GetBandAt(0);
InputParam.WarpCoeffX = cx;
InputParam.WarpCoeffY = cy;
InputParam.UseWarpCoeff = true;
InputParam.Resamplemethod = eResampleMethod.BiLinear;
XDMBandAffineTransform bandProcess = new XDMBandAffineTransform();
if (!bandProcess.SetInputParam(ref InputParam))
{
return;
}
XRSLoadFile fileLoad = RasterIO.LoadFile(strFilePathLoad, out strError, false, eIOCreateXLDMode.All_NoMsg);
XRSSaveFile fileSave = new XRSSaveFile();
for (int i = 0; i < fileLoad.NumBand; i++)
{
XDMBand bandRaw = fileLoad.GetBandAt(i);
XBandParamAffineTransform param = new XBandParamAffineTransform(ref InputParam);
param.SrcBand = bandRaw;
XDMBandAffineTransform bandTmp = new XDMBandAffineTransform();
bandTmp.BandName = bandRaw.BandName;
bandTmp.SetInputParam(ref param);
XDMBand bandCast = (XDMBand)bandTmp;
fileSave.AddBand(ref bandCast);
}
XThread thd = null;
String strFilePathSave = @"F:\SampleImage\TestUseGeoTransValue\AffineTransform.xdm";
if (!RasterIO.Export(ref fileSave, strFilePathSave, "XDM", out strError, thd))
{
return;
}
else
{
MessageBox.Show(strFilePathSave);
}
See Also