我试图在matlab中保存.tif。 Imwrite不支持直接为.tif写int16,但可以将我的图片转换为uint16并使用imwrite。
imageName='someimage.tif';
info=imfinfo(imageName);
num_images=numel(info);
x_size=info(1).Width;
y_size=info(1).Height;
result=zeros(y_size, x_size, num_images, 'uint16');
for i=1:num_images
result(:,:,i) = im2uint16(imread(imageName,i,'Info',info));
end
imwrite(result(:,:,i), 'newimage.tif');
for i=2:num_images,
imwrite(result(:,:,i), 'newimage.tif', 'WriteMode', 'append');
end
当我这样做时,似乎对比度会以某种方式增加,而我希望这些图片是相同的。
其次,我尝试使用this作为以下内容
imageName='someimage.tif';
info=imfinfo(imageName);
num_images=numel(info);
x_size=info(1).Width;
y_size=info(1).Height;
result=zeros(y_size, x_size, num_images, 'int16');
for i=1:num_images
result(:,:,i) = imread(imageName,i,'Info',info);
end
options.message=true;
saveastiff(result, 'newimage.tif', options);
我在这里遇到同样的问题,对比度上升,它会破坏画面。我正在处理灰度图片。 有没有办法保存这些图片而不会破坏它?
答案 0 :(得分:0)
我无法以雄辩的方式解决这个问题,但我做了以下
t = Tiff("Some_image.tif", 'r+');
imgs = zeros(y_size, x_size, num_images, 'uint16');
for k=1:num_images,
t.setDirectory(k);
imgs(:,:,k) = t.read();
end
result = doStuff(imgs)
for k=1:num_images,
t.setDirectory(k);
t.write(imgs(:,:,k));
end
这样做的缺点是它改变了原貌。优点是每帧的动态范围不会改变。