<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle">P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
</style>
</head>
<body fPStyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">
<div>
<p>Hi list,</p>
<p> </p>
<div class="BodyFragment"><font size="2"><font face="Tahoma">
<div class="PlainText">We receive SAR SLC<a></a><a></a> (single look complex) images in NITF2.1<a></a><a></a>. But the I and O bands are separate (HH_I<a></a><a></a>, HH_Q<a></a><a></a>, VV_I<a></a><a></a>, VV_Q<a></a><a></a>, etc)</div>
<div class="PlainText"> </div>
<div class="PlainText">My colleague modified<a></a> the gdal<a></a><a></a> NITF<a></a><a></a> driver nitfdataset.cpp<a></a><a></a> to rewrite them as NITFComplexRasterBand<a></a><a></a> (see below)</div>
<div class="PlainText">It works with a single-pol<a></a><a></a> SLC<a></a><a></a> and outputs as I+jQ<a></a><a></a>. However dual- and quad-pol<a></a><a></a> don't work. All three RGB<a></a><a></a> bands show the same HH_I<a></a><a></a> + j*HH_Q<a></a><a></a></div>
<div class="PlainText"> </div>
<div class="PlainText">Are we doing it wrong, or NITF2.1<a></a><a></a> doesn't allow multi-pol<a></a><a></a> Complex data type?<br>
</font><font face="Tahoma"></font> </div>
<div class="PlainText"><font face="Tahoma">Thanks,<br>
Shawn<br>
</font></div>
<div class="PlainText"><font face="Tahoma"><a></a><font face="Tahoma">GDALDataset</font> *NITFDataset<a></a>::OpenInternal<a></a>( GDALOpenInfo<a></a> * poOpenInfo<a></a>,<br>
                                GDALDataset<a></a> *poWritableJ2KDataset<a></a>,<br>
                                int<a></a> bOpenForCreate<a></a>)</font></div>
<div class="PlainText"><font face="Tahoma">{<br>
.....</font></div>
<div class="PlainText">.....</div>
<div class="PlainText"> </div>
<div class="PlainText"><font face="Tahoma">    GDALDataType<a></a><a></a> dt<a></a><a></a> = bandList<a></a><a></a>[0]->GetRasterDataType<a></a><a></a>();<br>
    if (EQUAL(psImage<a></a><a></a>->szICAT,"SAR<a></a><a></a>")    //SAR image...<br>
        && nUsableBands<a></a><a></a>==psImage<a></a><a></a>->nBands<a></a><a></a> && nUsableBands%2<a></a><a></a>==0     //...with 2 bands ... (modified to allow an even number - spec seems to indicate only 2 bands allowed?)
<br>
        && dt<a></a><a></a>==bandList<a></a><a></a>[1]->GetRasterDataType<a></a><a></a>()   //...that have the same datatype<a></a><a></a>...<br>
        && !GDALDataTypeIsComplex<a></a><a></a>(dt<a></a><a></a>)   //...and are not complex...<br>
        && (dt<a></a><a></a>==GDT_Int16<a></a><a></a> || dt<a></a><a></a>==GDT_Int32<a></a><a></a> || dt<a></a><a></a>==GDT_Float32<a></a><a></a> || dt<a></a><a></a>==GDT_Float64<a></a><a></a>))      //..and can be mapped directly to a complex type<br>
    {<br>
  bool<a></a><a></a> allBandsIQ<a></a><a></a> = true;<br>
  for (int<a></a><a></a> i<a></a><a></a> = 0; i<a></a><a></a> < nUsableBands<a></a><a></a>; i<a></a><a></a>+=2)<br>
  {<br>
   NITFBandInfo<a></a><a></a> *psBandInfo1<a></a><a></a> = psImage<a></a><a></a>->pasBandInfo<a></a><a></a> + i<a></a><a></a>;<br>
   NITFBandInfo<a></a><a></a> *psBandInfo2<a></a><a></a> = psImage<a></a><a></a>->pasBandInfo<a></a><a></a> + i<a></a><a></a> + 1;</font></div>
<div class="PlainText"><font face="Tahoma">   //check that the ISUBCAT<a></a><a></a> is labelled "I" and "Q" on the 2 bands<br>
   if (!EQUAL(psBandInfo1<a></a><a></a>->szISUBCAT<a></a><a></a>, "I") || !EQUAL(psBandInfo2<a></a><a></a>->szISUBCAT<a></a><a></a>, "Q"))<br>
   {<br>
    allBandsIQ<a></a><a></a> = false;<br>
    break;<br>
   }<br>
  }</font></div>
<div class="PlainText"><font face="Tahoma">  if (allBandsIQ<a></a><a></a>)<br>
  {<br>
   nUsableBands<a></a><a></a> /= 2;<br>
   for (int<a></a><a></a> i<a></a><a></a> = 0; i<a></a><a></a> < nUsableBands<a></a><a></a>; i<a></a><a></a>++)<br>
   {<br>
    //wrap the I and Q bands into a single complex band<br>
    bandList<a></a><a></a>[i<a></a><a></a>] = new NITFComplexRasterBand<a></a><a></a>(poDS<a></a><a></a>, bandList<a></a><a></a>[2 * i<a></a><a></a>], bandList<a></a><a></a>[2 * i<a></a><a></a> + 1], i+1<a></a><a></a>);<br>
   }<br>
  }<br>
    }</font></div>
<div class="PlainText"><font face="Tahoma">/* -------------------------------------------------------------------- */<br>
/*      Add bands to dataset                                            */<br>
/* -------------------------------------------------------------------- */<br>
    for( iBand<a></a><a></a> = 0; iBand<a></a><a></a> < nUsableBands<a></a><a></a>; iBand<a></a><a></a>++ )<br>
      poDS<a></a><a></a>->SetBand<a></a><a></a>( iBand+1<a></a><a></a>, bandList<a></a><a></a>[iBand<a></a><a></a>] );<br>
    CPLFree<a></a><a></a>(bandList<a></a><a></a>);<br>
</div>
</font></font></div>
</div>
</div>
</body>
</html>