![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1422198/image.png)
Is it possible to set the Alpha of the colour in geotiffwrite?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
logo cuit
am 29 Jun. 2023
Kommentiert: logo cuit
am 30 Jun. 2023
I am saving a TIFF file, as shown in the example below, and I want to set color Alpha. It seems that the geotiffwrite function in MATLAB cannot achieve this. Is there any other good solution?
%example
A1 = load('A1.mat');
cmp = jet;
R = georefcells([30 55],[100 110],size(A1));
geotiffwrite('test.tif',A1,cmp,R);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1422188/image.png)
0 Kommentare
Akzeptierte Antwort
Angelo Yeo
am 29 Jun. 2023
I believe you need to convert the grey image to RGB. Then you can add the alpha channel to tiff.
load('A1.mat');
cmp = jet;
R = georefcells([30 55],[100 110],size(A1));
geotiffwrite('test.tif',A1,cmp,R);
C = uint8(254 * colormap(jet));
img = imread('test.tif');
[rimg, cimg] = size(img);
for idx = 1:rimg
for jdx = 1:cimg
pixel = double(img(idx, jdx)) + 1;
new_red_pixel = C(pixel, 1);
new_green_pixel = C(pixel, 2);
new_blue_pixel = C(pixel, 3);
new_img(idx, jdx, 1) = new_red_pixel;
new_img(idx, jdx, 2) = new_green_pixel;
new_img(idx, jdx, 3) = new_blue_pixel;
end
end
% imshow(new_img)
% I referred to here to add alpha channel for tiff images
% https://kr.mathworks.com/help/matlab/ref/tiff.html#mw_a2efd938-557e-41ad-925b-64f84a51f07b
alphaval = 0.1; % change your alpha value
alpha = 255 * ones([rimg, cimg], 'uint8') * alphaval;
data = cat(3,new_img,alpha);
t = Tiff('myfile.tif','w');
setTag(t,'Photometric',Tiff.Photometric.RGB);
setTag(t,'Compression',Tiff.Compression.None);
setTag(t,'BitsPerSample',8);
setTag(t,'SamplesPerPixel',4);
setTag(t,'SampleFormat',Tiff.SampleFormat.UInt);
setTag(t,'ExtraSamples',Tiff.ExtraSamples.Unspecified);
setTag(t,'ImageLength',numrows);
setTag(t,'ImageWidth',numcols);
setTag(t,'TileLength',32);
setTag(t,'TileWidth',32);
setTag(t,'PlanarConfiguration',Tiff.PlanarConfiguration.Chunky);
write(t,data);
close(t);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1422198/image.png)
3 Kommentare
DGM
am 29 Jun. 2023
Two things:
If the image is indexed color, then read the entire image and map, then just use ind2rgb() instead of a slow loop with a slightly different map.
load('A1.mat');
cmp = jet(256); % SPECIFY THE LENGTH
R = georefcells([30 55],[100 110],size(A1));
geotiffwrite('test.tif',A1,cmp,R); % this writes an indexed color image
[img map] = imread('test.tif'); % so actually read it as an indexed color image
new_img = ind2rgb(img,cmp); % and convert it
The second problem is the length of the colormap. Note that I explicitly specified that in the call to jet(), since the mapping won't work unless it matches the dynamic range of uint8 (or otherwise the range of indices in the indexed image). Calling jet() without any arguments can get you a map of any unpredictable length depending on whether a prior figure is open -- regardless of whether it's being currently used, and regardless of whether it's been cleared.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Blue finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!