<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Hi,<br>&nbsp;As suggested by Frank and Even, I implemented a simple C++ version of gdalfilter.py (based on VRT driver) using the function below. Unfortunately, I keep getting the same data set as the source; no filtering is done at all! The destination file produced have the same content as the source file. Am I doing something wrong? Any help on this is very appreciated. I tried both gdal-1.4.1 and gdal-1.6.1 but no success.<br><br>================================================================<br>/**<br>* Apply an averaging filter to a GDALDataset<br>* sFileName: source file name<br>* dstFileName: destination file name<br>* size: size of the filter (kernal)<br>* coefficients: the coefficients of the filter.<br>**/<br>int average(char* sFileName, char* dstFileName, int size, const char* coefficients) {<br>&nbsp; GDALDriver *poDriver = (GDALDriver *) GDALGetDriverByName( "VRT" );<br>&nbsp; if (poDriver ==&nbsp; NULL) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt;"VRT Driver not found!"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp; }<br>&nbsp; GDALDataset *poVRTDS, *poSrcDS;<br>&nbsp; poSrcDS = (GDALDataset *) GDALOpen( sFileName, GA_ReadOnly);<br>&nbsp; poVRTDS = poDriver-&gt;CreateCopy( "", poSrcDS, FALSE, NULL, NULL, NULL );<br>&nbsp; int&nbsp;&nbsp; nBand;<br>&nbsp; for( nBand = 1; nBand &lt;= poVRTDS-&gt;GetRasterCount(); nBand++ ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GDALRasterBand *poBand = poVRTDS-&gt;GetRasterBand( nBand );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char szFilterSourceXML[10000];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf( szFilterSourceXML,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;KernelFilteredSource&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&nbsp; &lt;SourceFilename&gt;%s&lt;/SourceFilename&gt;&lt;SourceBand&gt;%d&lt;/SourceBand&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&nbsp; &lt;Kernel&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;Size&gt;%d&lt;/Size&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;Coefs&gt;%s&lt;/Coefs&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&nbsp; &lt;/Kernel&gt;"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/KernelFilteredSource&gt;",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sFileName,nBand,size,coefficients);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; szFilterSourceXML &lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poBand-&gt;SetMetadataItem( "source_0", szFilterSourceXML, "vrt_sources" );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //poBand-&gt;FlushCache();<br>&nbsp; }<br>&nbsp; GDALDriver *poTIFFDriver = (GDALDriver *) GDALGetDriverByName( "GTiff" );<br>&nbsp;&nbsp; if (poTIFFDriver ==&nbsp; NULL) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt;"GTIFF Driver not found!"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp; }<br>&nbsp; GDALDataset *poTiffDS;<br>&nbsp; poTiffDS = poTIFFDriver-&gt;CreateCopy( dstFileName, poVRTDS, FALSE, NULL, NULL, NULL );<br>&nbsp; poVRTDS-&gt;GetRasterBand( 1 )-&gt;FlushCache();<br><br>&nbsp; GDALClose(poSrcDS);<br>&nbsp; GDALClose(poTiffDS);<br>&nbsp; GDALClose(poVRTDS);<br>&nbsp; return 1;<br>}<br>===========================================================================<br>With best regards.<br>Belaid Moa.<br><br><hr id="stopSpelling">From: belaid_moa@hotmail.com<br>To: gdal-dev@lists.osgeo.org<br>Subject: RE: [gdal-dev] moving filter averaging in GDAL.<br>Date: Fri, 19 Jun 2009 17:50:02 +0000<br><br>



<style>
.ExternalClass .EC_hmmessage P
{padding:0px;}
.ExternalClass body.EC_hmmessage
{font-size:10pt;font-family:Verdana;}
</style>


Thank you very much Even. I was just making sure I am not reinventing the wheel :).<br>I will then write the C++ version.<br><br>With best regards.<br>~Belaid...<br><br>&gt; From: even.rouault@mines-paris.org<br>&gt; To: gdal-dev@lists.osgeo.org<br>&gt; Subject: Re: [gdal-dev] moving filter averaging in GDAL.<br>&gt; Date: Fri, 19 Jun 2009 19:44:10 +0200<br>&gt; CC: belaid_moa@hotmail.com<br>&gt; <br>&gt; It should be relatively straighforward to transpose from Python to C++, as <br>&gt; Python API is mostly deduced from the original C++ one. Look at the <br>&gt; documentation of the C++ API on gdal.org<br>&gt; <br>&gt; Le Friday 19 June 2009 19:27:40 Belaid MOA, vous avez écrit&nbsp;:<br>&gt; &gt; Thanks a lot Frank. Is there any C/C++ version for that? I am doing the<br>&gt; &gt; averaging filter from C++ code.<br>&gt; &gt;<br>&gt; &gt; With best regards.<br>&gt; &gt; Belaid Moa.<br>&gt; &gt;<br>&gt; &gt; &gt; Date: Fri, 19 Jun 2009 13:23:33 -0400<br>&gt; &gt; &gt; From: warmerdam@pobox.com<br>&gt; &gt; &gt; To: belaid_moa@hotmail.com<br>&gt; &gt; &gt; CC: gdal-dev@lists.osgeo.org<br>&gt; &gt; &gt; Subject: Re: [gdal-dev] moving filter averaging in GDAL.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Belaid MOA wrote:<br>&gt; &gt; &gt; &gt; Hi,<br>&gt; &gt; &gt; &gt;  Does GDAL have functions for applying an averaging filter of window,<br>&gt; &gt; &gt; &gt; say 11x11, to an image? This is something that comes up all the time in<br>&gt; &gt; &gt; &gt; image analysis. So, I suppose GDAL has built-in functions for that.<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt;  Any help on this is very appreciated.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Belaid,<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; There is support for filtering, including average filtering, with the<br>&gt; &gt; &gt; gdalfilter.py command in gdal/swig/python/samples.  It accomplished<br>&gt; &gt; &gt; by creating a virtual file using the &lt;KernelFilteredSource&gt; directive -<br>&gt; &gt; &gt; so ultimately the work is done by the VRT driver.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Best regards,<br>&gt; &gt; &gt; --<br>&gt; &gt; &gt; ---------------------------------------+---------------------------------<br>&gt; &gt; &gt;----- I set the clouds in motion - turn up   | Frank Warmerdam,<br>&gt; &gt; &gt; warmerdam@pobox.com light and sound - activate the windows |<br>&gt; &gt; &gt; http://pobox.com/~warmerdam and watch the world go round - Rush    |<br>&gt; &gt; &gt; Geospatial Programmer for Rent<br>&gt; &gt;<br>&gt; &gt; _________________________________________________________________<br>&gt; &gt; We are your photos. Share us now with Windows Live Photos.<br>&gt; &gt; http://go.microsoft.com/?linkid=9666047<br>&gt; <br>&gt; <br><br><hr>Attention all humans. We are your photos.  <a href="http://go.microsoft.com/?linkid=9666044">Free us.</a><br /><hr />We are your photos. Share us now with  <a href='http://go.microsoft.com/?linkid=9666045' target='_new'>Windows Live Photos.</a></body>
</html>