2017-05-12 1 views
1

私は次のようにTIFF形式のタイプuint16のグレースケール画像を読み取るために、低レベルの機能(fopenfread)を使用しようとしている:グレースケールイメージを読み取るために、低レベルの関数(imreadではなく)を使用するにはどうすればよいですか?

fid = fopen(filepath,'r'); 
img = fread(fid,[ncolms, nrows], 'uint16=>uint16')'; 

得られた画像マトリックスは、単に使用することによって得られたものとは異なりますimread

img = imread(filepath); 

得られた画像(左はfreadにより、右がimreadによるものである)を以下に示す:

enter image description here

明白な輝度の違いに加えて、fread画像に画像の上端に何らかのアーチファクトがあることに気付くこともあります。私はこれがイメージを読むという異なるメカニズムのせいであると考えます。

私は、彼らができれば、imreadを使用する同等に、画像(グレースケールではなく、バイナリ)を読むためにfopenfreadのような低レベルの関数を使用する方法を知りたいです。

+1

私は強引だとは限りませんが、あなたは[回答を受け入れる]ことなくかなりの質問をしました(http://stackoverflow.com/help/accepted-answer)。あなたは*あなたのことを気にする必要はありませんが、答えが本当に助けてあなたの質問に答えたなら、それはうれしいことです。 – gnovice

答えて

1

あなたが見ているこれらの「アーティファクト」は、イメージデータの前にファイルに格納されているヘッダーとタグのデータです。私はこのTIFF File Format Summaryを見てみることをお勧めします。 本当にあなた自身がそれをしたい場合は、これは、このすべての余分な情報を読む方法を正確に教えてくれます。この余分なタグ情報(ImageHeight、ImageWidth、BitsPerSample、SamplesPerPixelなど)の一部は、画像データを正しく読み取る方法を正確に判断し、imread関数から取得した画像と一致する場合に便利です。

関連する問題