[ 
https://issues.apache.org/jira/browse/IMAGING-259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bruno P. Kinoshita resolved IMAGING-259.
----------------------------------------
    Resolution: Fixed

> Enhance TIFF DataReaders speed for compressed RGB
> -------------------------------------------------
>
>                 Key: IMAGING-259
>                 URL: https://issues.apache.org/jira/browse/IMAGING-259
>             Project: Commons Imaging
>          Issue Type: Improvement
>          Components: Format: TIFF
>    Affects Versions: 1.0-alpha1
>            Reporter: Gary Lucas
>            Assignee: Bruno P. Kinoshita
>            Priority: Minor
>             Fix For: 1.0-alpha2
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> TIFF files support many different formats, some of them legacy or specialty 
> formats, others that are widely used. DataReaderStrips and DataReaderTiled 
> were originally written with a single block of code that collected the raw 
> data (samples) for each pixel and then passed it into a single method that 
> branched depending on the format.  This approach meant that for each pixel, 
> the reader loops had the extra overhead of a method call that executed 
> multiple conditional evaluations. In 2012, enhancements were added to imaging 
> to execute dedicated blocks of code for a few commonly used formats, most 
> notably 3-byte RGB.  However, at this time, the code does not support the 
> case where the RGB is stored with a differencing predictor. Predictors 
> improve the compression ratios (often significantly) when compressing RGB 
> images. So I propose to enhance the dedicated RGB code to support predictors.
> Here's an example of some performance testing on a large image that uses 
> compression with imaging. The time to load images was extracted using the 
> ApacheImagingSpeedAndMemoryTest.java code that is included in the examples 
> directory in the Commons Imaging code distribution.
> Processing file: CONUS_LandWaterMask_LZW_RGB.tif (original)
> image size: 6000 by 4000
>  
> {noformat}
> Processing file: CONUS_LandWaterMask_LZW_RGB.tif (original)
> image size: 6000 by 4000
> time to load image    --         memory
> time ms      avg ms   --    used mb   total mb
>  971.817     0.000    --    213.592   252.000 
>  921.690     0.000    --    143.229   260.000 
>  895.587   895.587    --     96.234   174.000 
>  899.227   897.407    --    117.259   154.000 
>  899.078   897.964    --    134.200   184.000 
>  889.602   895.873    --    143.226   180.000 
>  896.170   895.933    --    128.183   188.000 
>  894.250   895.652    --     97.187   178.000 
>  896.436   895.764    --    103.226   186.000 
>  891.540   895.236    --    119.185   171.000 
> Processing file: CONUS_LandWaterMask_LZW_RGB.tif (with changes)
>  image size: 6000 by 4000
> time to load image    --         memory
> time ms      avg ms   --    used mb   total mb
>  498.123     0.000    --    212.589   252.000 
>  423.136     0.000    --    110.733   237.000 
>  396.021   396.021    --    100.735   164.000 
>  400.435   398.228    --    115.725   160.000 
>  400.901   399.119    --    114.726   162.000 
>  395.092   398.112    --    118.711   159.000 
>  394.106   397.311    --    118.710   159.000 
>  400.866   397.903    --    118.710   159.000 
>  400.972   398.342    --    115.710   160.000 
>  397.218   398.201    --    109.691   164.000 
> {noformat}
>  
>  
> Additionally, the special-purpose RGB block of code included additional logic 
> to support a case for non-RGB formats where image samples were organized 3 
> one byte samples, but the photometric interpretation was not RGB.  According 
> to Coveralls, this block of code is not exercised by any of our test images.  
> Thus that part of the code is uncovered by testing. So I will be removing it 
> to improve the code-coverage scores. I believe that this change is 
> appropriate because, even if there are TIFF files "in the wild" that use this 
> configuration, the commons imaging library will still work properly.  In such 
> a case, the image samples would be handled properly by the original, 
> non-specialized block of code.    Furthermore, I went through the TIFF 
> specification and did not see any obvious examples of a case where that 
> configuration would be likely.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to