[gdal-dev] Border slivers and JPEG2000 compression

Matt Wilkie matt.wilkie at gov.yk.ca
Thu Dec 18 12:06:45 EST 2008


Hi Micheal,

I'm afraid I misadvised you. Nearblack and gdal_rasterize can't write to 
file formats which don't allow updating in place. Is using jp2 a hard 
requirement? Have you tried the available geotiff compressions 
(http://www.gdal.org/frmt_gtiff.html look at Creation Options)? Black 
and white images should compress pretty well.


matt wilkie
--------------------------------------------
Geographic Information,
Information Management and Technology,
Yukon Department of Environment
10 Burns Road * Whitehorse, Yukon * Y1A 4Y9
867-667-8133 Tel * 867-393-7003 Fax
http://environmentyukon.gov.yk.ca/geomatics/
--------------------------------------------


Smith, Michael wrote:
> I tried that but it doesn't seem to write to JP2KAK.  If I do this:
> 
> nearblack mosaic_jp2.jp2
> 
> I get this error:
> 0...10..ERROR 6: WriteBlock() not supported for this dataset.
> ERROR 1: GetBlockRef failed at X block offset 1, Y block offset 19
> ERROR 6: WriteBlock() not supported for this dataset.
> ERROR 6: WriteBlock() not supported for this dataset.
> ERROR 6: WriteBlock() not supported for this dataset.
> ERROR 6: WriteBlock() not supported for this dataset.
> 
> I have also tried creating an alpha channel with this:
> gdalwarp -srcnodata 0 -dstalpha *.tif mosaic.tif
> gdal_translate -ot Byte -of JP2KAK mosaic.tif mosaic_jp2.jp2
> 
> That works, but provides a JP2 that is twice the size since it has a
> second band (these are black-and-white images, so one 8-bit band).  I
> tried converting that to a single-band image, hoping it would interpret
> the alpha channel correctly, with this:
> 
> gdal_translate -ot Byte -of JP2KAK -b 1 -a_nodata 0 mosaic_jp2.jp2
> mosaic2_jp2.jp2
> 
> But the output again has a bunch of pixels on the edge which are now not
> value 0.
> 
> I cannot gdal_rasterize -burn the JP2 because gdal_rasterize does not
> write JP2KAK (why is that?  gdal_translate will but not gdal_rasterize)?
> 
> It seems like all the functions I need to work only do so on TIFFs, but
> it's the JP2s I need it to work on.
> 
> Any other suggestions?  Some trick involving alpha channels I don't
> know?  A way to get gdal_rasterize to write JP2KAK?
> 
> **********
> Michael Smith
> State GIS Manager
> Maine Office of GIS 
> -----Original Message-----
> From: Matt Wilkie [mailto:matt.wilkie at gov.yk.ca] 
> Sent: Tuesday, December 16, 2008 1:50 PM
> To: Smith, Michael
> Cc: gdal-dev at lists.osgeo.org
> Subject: Re: [gdal-dev] Border slivers and JPEG2000 compression
> 
> Hi Micheal, try the nearblack utility (which is a relatively new 
> addition): http://www.gdal.org/nearblack.html
> 
> "This utility will scan an image and try to set all pixels that are 
> nearly black (or nearly white) around the collar to exactly black (or 
> white). This is often used to "fix up" lossy compressed airphotos so 
> that color pixels can be treated as transparent when mosaicing."
> 
> cheers,
> 
> matt wilkie
> --------------------------------------------
> Geographic Information,
> Information Management and Technology,
> Yukon Department of Environment
> 10 Burns Road * Whitehorse, Yukon * Y1A 4Y9
> 867-667-8133 Tel * 867-393-7003 Fax
> http://environmentyukon.gov.yk.ca/geomatics/
> --------------------------------------------
> 
> 
> Smith, Michael wrote:
>> I have several orthophotos which are TIFFs, and they align with the
> USGS 
>> quadrangle corners, which means they are rotated slightly, leaving
> small 
>> uneven slivers along the edges where pixel value is 0 (the data for 
>> these are available from adjacent tiles).  All the pixels inside the 
>> 'real' area of the photo are value > 0.
>>
>> This is no problem with TIFFs, as the 0 can be turned off in 
>> applications such as ArcGIS or serving them out via MapServer WMS.
> But 
>> when I convert to JPEG2000 (using Kakadu), the edge pixels are 
>> interpolated to different values, typically something like 0, 1, 2, or
> 
>> 3.  Thus I can't just filter them out. Also inside the photo,
> sometimes 
>> very dark pixels (which should really be value 2, 3, etc) are
> converted 
>> to value 0.  Thus they show up as 'holes' in applications when pixel 
>> value 0 is filtered out.
>>
>> What I want to do is simply show a bunch of JP2 tiles, with the border
> 
>> pixels staying as value 0, and no other pixels having value 0.
>>
>> I have tried a couple approaches, including
>>
>> gdal_translate -a_nodata 0   (the border pixels still have values > 0)
>>
>> gdal_rasterize -i -burn 0    (won't write JP2KAK)
>>
>> Surely I'm not the first to try this, but I can't find the right steps
> 
>> on the web.  Any suggestions would be appreciated.
>>
>> **********
>> Michael Smith
>> State GIS Manager
>> Maine Office of GIS
>>
>>
>>
> ------------------------------------------------------------------------
>> _______________________________________________
>> gdal-dev mailing list
>> gdal-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/gdal-dev
> 


More information about the gdal-dev mailing list