0

.tif を matlab に保存しようとしています。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 に答える