Click or drag to resize
XDL

XDMBandSuperClass Class

XDMBandSuperClass클래스는 감독분류를 수행하는 클래스이다.
Inheritance Hierarchy

Namespace:  Pixoneer.NXDL.NRS
Assembly:  NXDLrs (in NXDLrs.dll) Version: 1.2.817.72
Syntax
C#
public class XDMBandSuperClass : XDMBand

The XDMBandSuperClass type exposes the following members.

Constructors
  NameDescription
Public methodXDMBandSuperClass
XDMBandSuperClass클래스의 기본 생성자로서, 멤버변수에 대하여 초기화를 수행한다.
Top
Methods
  NameDescription
Public methodGetInputParam
감독분류 영상처리를 위한 파라미터를 얻는다.
Public methodSetInputParam
감독분류 영상처리를 위한 입력 파라미터를 설정.
Top
Remarks

감독분류는 현장 조사, 지형도 등의 참고 자료, 분석자의 사전 지식 및 경험을 기초로 영상에 대한 분류 항목과 항목별 Training Data를 설정하고 이를 기준으로 영상의 모든 화소에 대하여 그 분광 특성이 가장 유사한 분류 항목으로 할당하는 과정을 말한다. 결과적으로 영상 자료는 분석자가 설정한 분류 항목에 관련된 주제를 가지는 주제도(Thematic Map)으로써 변환된다고 할 수 있다.

Examples
XML 형식으로 저장된 Signature 정보파일을 읽어 분류항목을 생성하고 입력 영상 파일에 Minimum Distance 분류방법을 적용하여 감독분류를 수행한다.
// 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;
}
See Also