필터 지우기
필터 지우기

manipulating multipage TIFF file

조회 수: 7 (최근 30일)
Raphael
Raphael 2023년 8월 29일
댓글: Raphael 2024년 4월 2일
I have a geo-refenreced TIFF file with 14 pages corresponding to 14 wavelengths. I want to normalize the image at each wavelength and create a new TIFF file with the normalized images. So far no problem. My problem is that the first page in my original TIFF includes a field called "GPSInfo" that I need to pass along to the new TIFF file. Imwrite does not seem to support the inclusion of such information in a TIFF file. Any suggestions?
Thanks

답변 (1개)

Dheeraj
Dheeraj 2023년 9월 6일
Hi,
Writing custom metadata like "GPSInfo" you can use a combination of functions from the MATLAB File Exchange and the built-in functions as "imwrite" does not support the inclusion of such information in a TIFF file.
  1. Use the "imread" function to read the original TIFF file and extract the first page's "GPSInfo" metadata using a library like the "Tiff" class.
  2. Apply the necessary normalization
  3. Use the imwrite function to create a new TIFF file for the normalized images.
  4. After writing each normalized image to the new TIFF file, use a custom function to add the "GPSInfo" metadata to the first page of the new TIFF file.
for i = 1:14 %Iterating through all pages
% Create a new file with normalised images, let it be newNormalisedPage
% Add "GPSInfo" metadata to the first page of the new TIFF file
if i == 1
new_tiff = Tiff( newNormalisedPage , 'r+');
new_tiff.setTag('GPSInfo', gps_info);
new_tiff.close();
end
end
  댓글 수: 1
Raphael
Raphael 2024년 4월 2일
I would like to follow-up on this as this answer does not seem to work for me. I have an image with 14 bands which I write to a tif file as shown below.
t2w=uint16(rand(201,207,14)); % dummy image in same format as actual one
[r,c,w]=size(t2w);
t = Tiff('myrandfile.tif','w');
setTag(t,'Photometric',1)
setTag(t,'PlanarConfiguration',1)
setTag(t,'ImageLength',r)
setTag(t,'ImageWidth',c)
setTag(t,'BitsPerSample',16);
setTag(t,'Compression',1);
setTag(t,'SamplesPerPixel',14);
setTag(t,"ExtraSamples",Tiff.ExtraSamples.Unspecified)
write(t,t2w)
Warning: Sum of Photometric color channels and ExtraSamples does not match the value specified in SamplesPerPixel.
Writing with this configuration will error in a future release. To correct the configuration, define the non-color channels as ExtraSamples.
close(t)
(BTW, can somone explain how to get rid of this warining?). Despite this warning message the tiff file is created correctly for my needs.
When I try to add a new tag as suggested in the answer above I get an error message:
new_tiff=Tiff('myrandfile.tif','r+');
Warning: TIFF library warning - 'TIFFReadDirectory: Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples..'
new_tiff.setTag('GPSInfo','MyInfo');
Error using Tiff/setTagInFile (line 2559)
'GPSInfo' is not a recognized tag name.

Error in Tiff/setTag (line 1412)
obj.setTagInFile(varargin{:});

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Image Data에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by