![]() | XDMBandSuperClass Class |
Namespace: Pixoneer.NXDL.NRS
public class XDMBandSuperClass : XDMBand
The XDMBandSuperClass type exposes the following members.
Name | Description | |
---|---|---|
![]() | XDMBandSuperClass | XDMBandSuperClass클래스의 기본 생성자로서, 멤버변수에 대하여 초기화를 수행한다. |
Name | Description | |
---|---|---|
![]() | GetInputParam | 감독분류 영상처리를 위한 파라미터를 얻는다. |
![]() | SetInputParam | 감독분류 영상처리를 위한 입력 파라미터를 설정. |
감독분류는 현장 조사, 지형도 등의 참고 자료, 분석자의 사전 지식 및 경험을 기초로 영상에 대한 분류 항목과 항목별 Training Data를 설정하고 이를 기준으로 영상의 모든 화소에 대하여 그 분광 특성이 가장 유사한 분류 항목으로 할당하는 과정을 말한다. 결과적으로 영상 자료는 분석자가 설정한 분류 항목에 관련된 주제를 가지는 주제도(Thematic Map)으로써 변환된다고 할 수 있다.
// XML 형식의 signature 파일 읽기 XSIGSet LoadSigSet(String strFilePathSIG, XRSLoadFile xrsFileInput) { // Array Band ArrayList arrList = new ArrayList(); for (int i = 0; i < xrsFileInput.NumBand; i++) { arrList.Add(xrsFileInput.GetBandAt(i)); } XSIGSet sigSet = new XSIGSet(); // Load From File.... if (true) { if (!sigSet.LoadSIGSet(strFilePathSIG)) { MessageBox.Show("Fail"); return null; } // Print out information 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; } .... // IO initialize to load image file XRasterIO RasterIO = new XRasterIO(); String strError = ""; if (RasterIO.Initialize(out strError) == false) { return; } // Image load 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; // Set input param 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; // Create New process band and set input param XDMBandSuperClass bandProcess = new XDMBandSuperClass(); bandProcess.BandName = xrsFileInput.FileName; bandProcess.SetInputParam(ref InputParam); // create XRSSaveFile to save realtime band(XDMBandXXXX) // load another file to protect thread lock(it is stable and faster). XRSSaveFile fileSave = new XRSSaveFile(); XDMBand bandCast = (XDMBand)bandProcess; fileSave.AddBand(ref bandCast); // Save output file XThread thd = null; String strFilePathSave = "D:\\Sample\\Out_SuperClass.xdm"; if (!RasterIO.Export(ref fileSave, strFilePathSave, "XDM", out strError, thd)) { return; }