0

我正在尝试在 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

当我这样做时,对比度似乎以某种方式增加,而我希望图片是相同的。

其次,我尝试使用如下

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);

我在这里有同样的问题,对比度上升,它破坏了画面。我正在处理灰度的图片。有没有办法保存这些图片而不破坏它?

4

1 回答 1

0

@siliconwafer 帮助我理解我的问题是前几帧相当亮,如果您使用与第一张图片相同的动态范围,则其余图片显示为黑色。

我无法以雄辩的方式解决这个问题,但我做了以下

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

这样做的缺点是它会改变图片。优点是每一帧的动态范围不会改变。

于 2015-04-08T12:11:29.483 回答