Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中为geoTIFF图像添加alpha通道_Matlab_Tiff_Alpha_Geotiff - Fatal编程技术网

在Matlab中为geoTIFF图像添加alpha通道

在Matlab中为geoTIFF图像添加alpha通道,matlab,tiff,alpha,geotiff,Matlab,Tiff,Alpha,Geotiff,尝试向地理参考tiff图像中的RGB数据添加alpha(透明度)通道。在一个单独的问题中,我被引导完成了创建geotiff的过程。代码的第一部分从附加的png文件()创建geotiff,第二部分从白色区域创建遮罩,将其附加到RGB数据,并尝试在新文件中重写geotiff之前修改适当的标记。但是,生成的图像是空白的。我怀疑“光度控制”标签有问题,但看不出问题所在 file = 'uk_dT.png' ; [path,name,ext] = fileparts(file) ; I = imrea

尝试向地理参考tiff图像中的RGB数据添加alpha(透明度)通道。在一个单独的问题中,我被引导完成了创建geotiff的过程。代码的第一部分从附加的png文件()创建geotiff,第二部分从白色区域创建遮罩,将其附加到RGB数据,并尝试在新文件中重写geotiff之前修改适当的标记。但是,生成的图像是空白的。我怀疑“光度控制”标签有问题,但看不出问题所在

file = 'uk_dT.png' ; 
[path,name,ext] = fileparts(file) ;

I = imread(file) ;
I = flipud(I);

lonmin = -17; lonmax = 10; latmin = 47; latmax = 63;

% Write to geotiff
R = georasterref('RasterSize',size(I),'LatitudeLimits',[latmin,latmax],'LongitudeLimits',[lonmin,lonmax]);
tiffile = strcat(name,'.tif') ;
geotiffwrite(tiffile,I,R) ;

%% Now we have a geotiff but need transparency.

% Make alpha mask by identifying white regions
S = sum(I,3);
mask = 255*ones(size(I,1),size(I,2));
mask(S==765) = 0; % create mask
I = cat(3,I,mask); % concatenate alpha channel onto RGB data

info = geotiffinfo(tiffile); % reload RGB tiff data

% use Tiff tags to append alpha data
tiffile2 = strcat(name,'2.tif') ;
geotiffwrite(tiffile2,I,R,'GeoKeyDirectoryTag', ...
  info.GeoTIFFTags.GeoKeyDirectoryTag,'TiffTags', ...
  struct('ExtraSamples',Tiff.ExtraSamples.AssociatedAlpha, ...
  'Photometric',Tiff.Photometric.Separated));
编辑:进一步研究这个问题后,似乎不可能在Matlab中向geoTIFF添加alpha通道(至少没有一些巧妙的解决方法),原因如下:

1:“光度”标记应设置为“RGB”,因为我们正在创建的颜色空间是RGB+alpha。但是,geotiffwrite中有一个互锁,当此标记设置为RGB时,它阻止您写入x*y*3数组以外的任何内容。我上面使用的代码(在网上的某个地方找到)通过使用“分离”来绕过错误,但这与CMYK颜色空间有关,因此肯定不是正确的设置

2:您设置了“ExtraSamples”标记,以通知需要RGB数据以外的数据。但在我看到的其他示例中,您还必须将“SamplesPerPixel”标记设置为4以反映这一点。Geotiffwrite无法将其识别为有效标记。事实上,深入研究geotiffwrite代码并查看有效的标记,与tiff()命令相比,只有一小部分可用选项


我很想被证明是错误的,但看来我必须手动加载一个外部包中的数百个文件,并将白色区域更改为透明

我用Photoshop打开你的结果,TIF图像看起来很好。第二个输出看起来更暗,但也不是空白。您是如何打开文件的?可能存在类型转换问题,但我对此表示怀疑。试试这些变化,看看是否有区别:
S=sum(double(I),3);掩码=255*个(大小(I,1),大小(I,2),'uint8')Yvon-我使用ArcMap打开图像。第一个tiff输出对我来说也很好。第二个tiff显示为黑色。只能访问Photopaint,但这会引发一个错误,即第二个tiff不支持标记。出于兴趣,使用ArcGIS load fine制作的GeoTIFF在两个包中都很好,透明度也如预期的那样。gnovice-谢谢,好主意,但至少对我来说它并不能解决问题。我使用Photoshop打开你的结果,TIF图像看起来很好。第二个输出看起来更暗,但也不是空白。您是如何打开文件的?可能存在类型转换问题,但我对此表示怀疑。试试这些变化,看看是否有区别:
S=sum(double(I),3);掩码=255*个(大小(I,1),大小(I,2),'uint8')Yvon-我使用ArcMap打开图像。第一个tiff输出对我来说也很好。第二个tiff显示为黑色。只能访问Photopaint,但这会引发一个错误,即第二个tiff不支持标记。出于兴趣,使用ArcGIS load fine制作的GeoTIFF在两个包中都很好,透明度也如预期的那样。gnovice-谢谢,好主意,但至少对我来说,它不能解决问题。