|
XDMBandSuperClass Class
|
XDMBandSuperClass클래스는 감독분류를 수행하는 클래스이다.
Inheritance Hierarchy
Namespace: Pixoneer.NXDL.NRSAssembly: NXDLrs (in NXDLrs.dll) Version: 2.0.3.38
Syntaxpublic class XDMBandSuperClass : XDMBand
The XDMBandSuperClass type exposes the following members.
Constructors
Methods
Remarks
감독분류는 현장 조사, 지형도 등의 참고 자료, 분석자의 사전 지식 및 경험을 기초로 영상에 대한 분류 항목과 항목별 Training Data를 설정하고
이를 기준으로 영상의 모든 화소에 대하여 그 분광 특성이 가장 유사한 분류 항목으로 할당하는 과정을 말한다.
결과적으로 영상 자료는 분석자가 설정한 분류 항목에 관련된 주제를 가지는 주제도(Thematic Map)으로써 변환된다고 할 수 있다.
Example
XML 형식으로 저장된 Signature 정보파일을 읽어 분류항목을 생성하고 입력 영상 파일에 Minimum Distance 분류방법을 적용하여 감독분류를 수행한다.
XSIGSet LoadSigSet(String strFilePathSIG, XRSLoadFile xrsFileInput)
{
ArrayList arrList = new ArrayList();
for (int i = 0; i < xrsFileInput.NumBand; i++)
{
arrList.Add(xrsFileInput.GetBandAt(i));
}
XSIGSet sigSet = new XSIGSet();
if (true)
{
if (!sigSet.LoadSIGSet(strFilePathSIG))
{
MessageBox.Show("Fail");
return null;
}
for (int i = 0; i < sigSet.GetSIGSize(); i++)
{
XSIG sig = sigSet.GetSIGAt(i);
Console.WriteLine("SIG Name : " + sig.Name);
Console.WriteLine("SIG Color : " + sig.SIGColor.ToString());
for (int j = 0; j < sig.GetROISize(); j++)
{
XROI roi = sig.GetROIAt(j);
Console.WriteLine("ROI Name :" + roi.Name);
Console.WriteLine("ROI Color : " + roi.ROIColor.ToString());
for (int k = 0; k < roi.GetVertSize(); k++)
{
XVertex3d vt = roi.GetVertAt(k);
Console.WriteLine("x : " + vt.x.ToString() + "y : " + vt.y.ToString() + "z : " + vt.z.ToString());
}
}
}
}
else
{
XROI roi1 = new XROI();
roi1.Name = "ROI_1";
roi1.ROIColor = Color.Red;
roi1.AddVert(new XVertex3d(473860.4787, 5156586.0569, 0));
roi1.AddVert(new XVertex3d(474352.5272, 5154904.89117, 0));
roi1.AddVert(new XVertex3d(475049.5960, 5155601.9599, 0));
roi1.AddVert(new XVertex3d(474680.5596, 5156340.0326, 0));
XSIG sig1 = new XSIG();
sig1.AddROI(roi1);
sig1.Name = "SIG_1";
sig1.SIGColor = Color.Blue;
XROI roi2 = new XROI();
roi2.Name = "ROI_2";
roi2.ROIColor = Color.Blue;
roi2.AddVert(new XVertex3d(470938.9407, 5143669.78335, 0));
roi2.AddVert(new XVertex3d(470938.9407, 5143136.7307, 0));
roi2.AddVert(new XVertex3d(471574.5033, 5143095.7267, 0));
roi2.AddVert(new XVertex3d(471964.0417, 5143116.2287, 0));
roi2.AddVert(new XVertex3d(471923.0377, 5143751.7914, 0));
roi2.AddVert(new XVertex3d(471718.0175, 5144100.3258, 0));
XSIG sig2 = new XSIG();
sig2.AddROI(roi2);
sig2.Name = "SIG_2";
sig2.SIGColor = Color.Red;
XROI roi3 = new XROI();
roi3.Name = "ROI_3";
roi3.ROIColor = Color.Green;
roi3.AddVert(new XVertex3d(459437.3066, 5141455.5650, 0));
roi3.AddVert(new XVertex3d(459642.3268, 5140943.0144, 0));
roi3.AddVert(new XVertex3d(459888.3510, 5140922.5124, 0));
roi3.AddVert(new XVertex3d(460298.3915, 5141066.0266, 0));
roi3.AddVert(new XVertex3d(460175.3793, 5141640.0832, 0));
roi3.AddVert(new XVertex3d(460072.8692, 5141988.6175, 0));
XSIG sig3 = new XSIG();
sig3.AddROI(roi3);
sig3.Name = "SIG_3";
sig3.SIGColor = Color.Green;
sigSet.AddSIG(sig1);
sigSet.AddSIG(sig2);
sigSet.AddSIG(sig3);
}
sigSet.CalcStatistics(arrList, null);
return sigSet;
}
....
XRasterIO RasterIO = new XRasterIO();
String strError = "";
if (RasterIO.Initialize(out strError) == false)
{
return;
}
String strFilePathLoad = "D:\\Sample\\RS_Sample\\UnSuperClass\\etm.xdm";
String strFilePathLoadSIG = "D:\\Sample\\RS_Sample\\SuperClass\\etm.sig";
XRSLoadFile xrsFileInput = RasterIO.LoadFile(strFilePathLoad, out strError, false, eIOCreateXLDMode.All_NoMsg);
XSIGSet sigSet = LoadSigSet(strFilePathLoadSIG, xrsFileInput);
eSuperClassMethod method;
method = eSuperClassMethod.MinDist;
XBandParamSuperClass InputParam = null;
if (method == eSuperClassMethod.MinDist)
{
InputParam = new XBandParamSuperClassMinDist();
((XBandParamSuperClassMinDist)InputParam).MaximumDist = 0;
}
else if (method == eSuperClassMethod.ParallelPiped)
{
InputParam = new XBandParamSuperClassParallel();
((XBandParamSuperClassParallel)InputParam).Range = 2;
((XBandParamSuperClassParallel)InputParam).UseMinDist = false;
}
else if (method == eSuperClassMethod.MahalaDist)
{
InputParam = new XBandParamSuperClassMahalanobis();
((XBandParamSuperClassMahalanobis)InputParam).MaximumDist = 0.0;
}
else if (method == eSuperClassMethod.MaxLike)
{
InputParam = new XBandParamSuperClassMaxLike();
int numSig = sigSet.GetSIGSize();
for (int i=0; i < numSig; i++)
{
((XBandParamSuperClassMaxLike)InputParam).PriorProbability.Add(1.0);
}
}
else if (method == eSuperClassMethod.SpecAngle)
{
InputParam = new XBandParamSuperClassSpecAngle();
((XBandParamSuperClassSpecAngle)InputParam).MaxSpecAngle = XAngle.FromDegree(0.0);
}
for (int i = 0; i < xrsFileInput.NumBand; i++)
{
InputParam.ArrBandList.Add(xrsFileInput.GetBandAt(i));
}
InputParam.NullValue = 0;
InputParam.SigSet = sigSet;
XDMBandSuperClass bandProcess = new XDMBandSuperClass();
bandProcess.BandName = xrsFileInput.FileName;
bandProcess.SetInputParam(ref InputParam);
XRSSaveFile fileSave = new XRSSaveFile();
XDMBand bandCast = (XDMBand)bandProcess;
fileSave.AddBand(ref bandCast);
XThread thd = null;
String strFilePathSave = "D:\\Sample\\Out_SuperClass.xdm";
if (!RasterIO.Export(ref fileSave, strFilePathSave, "XDM", out strError, thd))
{
return;
}
See Also