[gdal-dev] KernelFilteredSource and nodata

Boss, Ken (DNR) Ken.Boss at state.mn.us
Fri Nov 19 10:45:04 EST 2010


Thanks very much Chaitanya, that was indeed my problem.

I am using gdal_grid to create the image that I am filtering, and am setting "nodata=255" as a parameter on the interpolation algorithm.  I had expected that this would cause nodata areas to be written as 255, and that 255 would be marked as the nodata value in the output image (geotiff) metadata, but apparently only the former is true, and I need to run the output through gdal_translate as you indicate in order to set the metadata.

Thanks again,

--Ken

From: gdal-dev-bounces at lists.osgeo.org [mailto:gdal-dev-bounces at lists.osgeo.org] On Behalf Of Chaitanya kumar CH
Sent: Thursday, November 18, 2010 10:59 PM
To: Boss, Ken (DNR)
Cc: gdal-dev at lists.osgeo.org
Subject: Re: [gdal-dev] KernelFilteredSource and nodata

Ken,

KernelFilteredSource is derived from SimpleSource. It does not support setting a nodata value to the source band.
Make sure your source image has a nodata value. You can set it using gdal_translate with the -a_nodata option.
On Fri, Nov 19, 2010 at 2:10 AM, Boss, Ken (DNR) <Ken.Boss at state.mn.us<mailto:Ken.Boss at state.mn.us>> wrote:
Chaitanya--

Thanks much for your response.

I don't think that I described my problem effectively.  Let me restate it and see if we are talking about the same thing.

Here is a .vrt file that I think should accomplish what I am after:

<VRTDataset rasterYSize='690' rasterXSize='575'>
 <SRS>EPSG:26915</SRS>
 <GeoTransform>190000, 1000, 0, 4795000, 0, 1000</GeoTransform>
 <VRTRasterBand band='1' dataType='Byte'>
   <KernelFilteredSource>
     <SourceFilename>D:/MyFiles/aptana_workspace/fire-webpage-mgmt/data/tmp_images/interpolated.tif</SourceFilename>
     <SourceBand>1</SourceBand>
     <NoDataValue>255</NoDataValue>
     <Kernel normalized="1">
       <Size>5</Size>
       <Coefs>0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04</Coefs>
     </Kernel>
   </KernelFilteredSource>
 </VRTRasterBand>
</VRTDataset>
I believe this file to be saying that interpolated.tif uses a value of 255 for nodata, and that the kernel is to be normalized - that is, it should:

 o ignore any nodata pixels within the kernel window when operating on a valid pixel
 o adjust the coefficients to sum to one for the number of valid pixels in the window when operating on a valid pixel
 o do nothing at all when centered on a nodata pixel

I would expect then that any pixels that go in as nodata should come out as nodata, and that pixels with valid data values that are near nodata pixels should not be influenced by them.

However, the outputs are not what I expect.  The averaging is applied to both nodata and valid pixels alike.  Have I set this up correctly, and is there a bug somewhere, or (more likely) is my vrt improperly constructed?

Thanks for your help,

--Ken

> -----Original Message-----
> From: Chaitanya kumar CH [mailto:chaitanya.ch at gmail.com<mailto:chaitanya.ch at gmail.com>]
> Sent: Wednesday, November 17, 2010 11:11 PM
> To: Boss, Ken (DNR)
> Cc: gdal-dev at lists.osgeo.org<mailto:gdal-dev at lists.osgeo.org>
> Subject: Re: [gdal-dev] KernelFilteredSource and nodata
>
> Ken,
>
> The current kernel filter does not ignore the boundaries of nodata pixels. But it
> does normalize the kernel after ignoring the nodata pixels in the kernel, if the
> 'normalized' attribute is set to 1.
>
> You can raise a ticket to request for this feature at
> http://trac.osgeo.org/gdal/newticket
>
>> On Thu, Nov 18, 2010 at 6:08 AM, Boss, Ken (DNR) <Ken.Boss at state.mn.us<mailto:Ken.Boss at state.mn.us>>
>> wrote:
>> Hello list--
>>
>> I am attempting to filter a raster using gdal_translate (v 1.7) and a vrt with a
>> KernelFilteredSource.  The input raster contains large areas of "nodata" values.  I
>> would like the filter to ignore those areas.  I have tried various combinations of
>> <NoDataValue>, <HideNoDataValue>, <NODATA> and <Kernel normalized='1'>,
>> but have not been able to prevent the filter from applying itself at data/nodata
>> boundaries.
>>
>> My current VRT and gdal_translate command lines are below.  Can anyone tell me
>> what I am doing wrong?
>>
>> Thanks,
>>
>> Ken Boss
>> Minnesota DNR
>>
>> ===== kernel_filter.vrt ===================
>>
>> <VRTDataset rasterYSize='690' rasterXSize='575'>
>>  <SRS>EPSG:26915</SRS>
>>  <GeoTransform>190000, 1000, 0, 4795000, 0, 1000</GeoTransform>
>>  <VRTRasterBand band='1' dataType='Byte'>
>>    <KernelFilteredSource>
>>      <SourceFilename>interpolated.tif</SourceFilename>
>>      <SourceBand>1</SourceBand>
>>      <NoDataValue>255</NoDataValue>
>>      <HideNoDataValue>1</HideNoDataValue>
>>      <Kernel normalized='1'>
>>        <Size>5</Size>
>>        <Coefs>0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04
>> 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04 0.04</Coefs>
>>      </Kernel>
>>    </KernelFilteredSource>
>>  </VRTRasterBand>
>> </VRTDataset>
>>
>> =====================================
>>
>> gdal_translate -of GTiff -ot Byte -a_srs EPSG:26915 kernel_filter.vrt
>> kernel_filtered.tif
>>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org<mailto:gdal-dev at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
>
>
> --
> Best regards,
> Chaitanya kumar CH.
> /tʃaɪθənjə/ /kʊmɑr/
> +91-9494447584
> 17.2416N 80.1426E



--
Best regards,
Chaitanya kumar CH.
/tʃaɪθənjə/ /kʊmɑr/
+91-9494447584
17.2416N 80.1426E
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20101119/fded164a/attachment-0001.html


More information about the gdal-dev mailing list