Reputation: 5040
I'm trying to use low-level functions (fopen
and fread
) to read a grayscale image of type uint16
in TIFF format as follows:
fid = fopen(filepath,'r');
img = fread(fid,[ncolms, nrows], 'uint16=>uint16')';
The obtained image matrix is different from that obtained by simply using imread
:
img = imread(filepath);
The resulting images are shown below (the left is by fread
and the right is by imread
):
In addition to the obvious intensity difference, one may also note that fread
image has some artifacts in the top edge of image. I think this must be due to their different mechanisms of reading images.
I want to know how to use such low-level functions as fopen
and fread
to read images (grayscale, not binary), equivalently to using imread
, if they can.
Upvotes: 1
Views: 199
Reputation: 125864
Those "artifacts" you're seeing are likely the header and tag data stored in the file before the image data. I would suggest taking a look at this TIFF File Format Summary. It will tell you exactly how to read all this extra information, if you really want to do it yourself. Note that some of this extra tag information (i.e. ImageHeight, ImageWidth, BitsPerSample, SamplesPerPixel, etc.) will be useful in determining exactly how to read the image data correctly, and thus match the image you get from the imread
function.
Upvotes: 1