[R] Reading a TIFF file

Uwe Ligges ligges at statistik.tu-dortmund.de
Fri Apr 22 16:22:48 CEST 2011



On 22.04.2011 16:19, Julio Rojas wrote:
> Thanks Uwe. I totally understood the problem. BTW, in your code you forgot to define "reduce". Can you define it in the function?

Just see how I modified the function, you can do so as well.


> If the file has different minimum as well as maximum levels from this one, will it work?

As long as it is in [0, 255], yes, see the code.

Best,
Uwe



>
> Regards.
>
> Julio
>
>
> --- El vie, 4/22/11, Uwe Ligges<ligges at statistik.tu-dortmund.de>  escribió:
>
>> De: Uwe Ligges<ligges at statistik.tu-dortmund.de>
>> Asunto: Re: [R] Reading a TIFF file
>> A: "Julio Rojas"<jcredberry at ymail.com>
>> Cc: r-help at r-project.org
>> Fecha: viernes, 22 de abril de 2011, 03:54 pm
>> Fine, looking at the code shows that
>> readTiff read the image with using libtiff which should be
>> fine. Afterwards, a pixmap obnject is generated via
>> pixmapRGB() which includes the following lines:
>>
>>      datamax<- max(data)
>>      datamin<- min(data)
>>      data<- as.numeric(data)
>>      if (datamax>  1 || datamin<  0)
>>          data<- (data -
>> datamin)/(datamax - datamin)
>>
>> That means the data is perfectly fitted into the [0,1]
>> interval.
>>
>> That means we have not only rescaled but also another 0
>> now.
>>
>> What I did is:
>>
>> pic<- readTiff("test1_layer1.tif")
>> pic<- pic at red
>> ARC<- read.csv2("test1_arcgis.csv", header=TRUE)
>> ARC<- matrix(ARC[,2], nrow=nrow(pic), byrow=TRUE)
>>
>> plot(pic)
>> plot(ARC)# looks *very* similar
>>
>> plot(as.vector(pic) ~ as.vector(ARC))
>> # all on one line
>>
>> summary(lm(as.vector(pic) ~ as.vector(ARC)))
>> # resuiduals<  10^(-14)
>>
>> So the formula use to get from the ARC to the pixmap data
>> is
>> pixmapdata = -0.82278 * 0.01266 ARCdata
>>
>> if you want to get the original data, you can adapt the
>> readTiff function for your own use for greyscales (and save
>> memory that way) as in:
>>
>>
>> myReadTiff<- function (fn, page = 0)
>> {
>>    w<- .C("TiffGetWidth", as.character(fn), w =
>> as.integer(0),
>>      PACKAGE = "rtiff")$w
>>    h<- .C("TiffGetHeight", as.character(fn), h =
>> as.integer(0),
>>      PACKAGE = "rtiff")$h
>>    nw<- ceiling((1 - reduce) * w)
>>    nh<- ceiling((1 - reduce) * h)
>>    if (w>  0&&  h>  0) {
>>      tiff<- .C("TiffReadTIFFRGBA",
>> as.character(fn),
>>        page = as.integer(page),
>>        r = integer(w * h), g = integer(w *
>> h), b = integer(w * h),
>>        PACKAGE = "rtiff")
>>      tiff<- tiff$r / 255
>>      tiff<- pixmapGrey(data = tiff, nrow = nh,
>> ncol = nw)
>>      return(tiff)
>>    }
>>    stop("Could not open", fn, ".  File corrupted
>> or missing.\n")
>> }
>>
>> pic2<- myReadTiff("test1_layer1.tif")
>>
>>
>> Now pic2 at grey will be exactly the same as ARC/255 from
>> above.
>>
>> Uwe Ligges
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On 22.04.2011 15:10, Julio Rojas wrote:
>>> Dear Uwe, find attached an small portion of the file
>> I'm working with. ArcGIS values for this file are in the CSV
>> file. They are a vector of all rows put together.
>>>
>>> Thanks and regards.
>>>
>>>
>>> --- El vie, 4/22/11, Uwe Ligges<ligges at statistik.tu-dortmund.de>
>> escribió:
>>>
>>>> De: Uwe Ligges<ligges at statistik.tu-dortmund.de>
>>>> Asunto: Re: [R] Reading a TIFF file
>>>> A: "Julio Rojas"<jcredberry at ymail.com>
>>>> Cc: r-help at r-project.org
>>>> Fecha: viernes, 22 de abril de 2011, 12:37 pm
>>>> Unless you can provide a small
>>>> reproducible example (say a very small
>>>> tiff including the values you got from the non-R
>> software)
>>>> it will be
>>>> hard to tell what is going on.
>>>>
>>>> Uwe Ligges
>>>>
>>>>
>>>> On 22.04.2011 11:23, Julio Rojas wrote:
>>>>> Dear all, I have been trying to speed up a
>> process we
>>>> have been done in ArcGIS. We have to read a single
>> layer
>>>> TIFF (monochrome image) in . For this, I have used
>> the
>>>> "rtiff" package. After reading the TIFF file, I
>> compared the
>>>> raw values for each pixel that I have in ArcGIS to
>> the ones
>>>> obtained in R. In ArcGIS I have discrete values in
>> the range
>>>> 0..255, while in R I have continuous values
>> between 0..1.
>>>> This, in itself might not be a problem if the
>> values
>>>> obtained in R, times 255 would show the values
>> obtained in
>>>> ArcGIS, but this is not the case. The images are
>> very
>>>> different. I tried to settle matters using
>> Photoshop, and
>>>> the values there are completely different from the
>> other two
>>>> (using RGB, the K value (in CMYK) or the B value
>> (in
>>>> HSB))!!!
>>>>>
>>>>> Can somebody help me with this problem? Can I
>> trust
>>>> "rtiff"? Should I stick to a very slow process in
>> ArcGIS?
>>>> Why PS, which should be the perfect measuring
>> stick, is
>>>> showing another set of values?
>>>>>
>>>>> Thanks in advance. Regards.
>>>>>
>>>>> Julio
>>>>>
>>>>>
>> ______________________________________________
>>>>> R-help at r-project.org
>>>> mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>>>> and provide commented, minimal,
>> self-contained,
>>>> reproducible code.
>>>>
>>



More information about the R-help mailing list