Re: [R] Reading a TIFF file

From: Uwe Ligges <ligges_at_statistik.tu-dortmund.de>
Date: Fri, 22 Apr 2011 16:22:48 +0200

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.
>>>>
>>



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. Received on Fri 22 Apr 2011 - 14:26:10 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 22 Apr 2011 - 14:50:32 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive