在 matlab 中保存一个 int16 堆叠的 tif
Saving an int16 stacked tif in matlab
我正在尝试在 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);
我这里也有同样的问题,对比度变高了,毁了画面。我正在处理灰度的图片。
有没有办法保存这些图片而不破坏它?
@siliconwafer 帮助我理解我的问题是前几帧相当亮,如果使用与第一张图片相同的动态范围,其余图片会显示黑色。
我无法以 eloquent 的方式解决这个问题,但我做了以下
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
这样做的缺点是它会原地更改图片。优点是每一帧的动态范围都不会改变。
我正在尝试在 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);
我这里也有同样的问题,对比度变高了,毁了画面。我正在处理灰度的图片。 有没有办法保存这些图片而不破坏它?
@siliconwafer 帮助我理解我的问题是前几帧相当亮,如果使用与第一张图片相同的动态范围,其余图片会显示黑色。
我无法以 eloquent 的方式解决这个问题,但我做了以下
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
这样做的缺点是它会原地更改图片。优点是每一帧的动态范围都不会改变。