Read thumbnail/embedded JPEG in DNG file

I have a compressed DNG file which I can preview in the Photos app on Windows 11, possibly because there is an embedded JPEG aka thumbnail in the DNG file. Is there a way to read this thumbnail into Matlab? I figure if Windows Photos can do it, Matlab should be able to also. I can't seem to use imread as suggeted here to get the preview, however:
imread('SomeCompressedDngFile.DNG') % Error: Unable to read TIFF file "SomeCompressedDngFile.DNG". File is corrupt or image does not
contain any readable tiles.
imread('SomeCompressedDngFile.DNG', 'jpeg') % Error: 'SomeCompressedDngFile.DNG is not a jpeg file

2 件のコメント

Walter Roberson
Walter Roberson 2023 年 2 月 28 日
Note that the TIFF content itself is probably not going to make sense as DNG images are typically compressed in a way that the Tiff class does not know how to handle.
KAE
KAE 2023 年 3 月 3 日
編集済み: KAE 2023 年 3 月 3 日
Thanks for these suggestions. With the FEX program, I was getting errors ("Error using tifflib. Unable to retrieve SubIFD") with the compressed version of the DNG files, so I tried it on the uncompressed version, which fails at,
curve = uint16(info.SubIFDs{1}.LinearizationTable);
Unrecognized field name "LinearizationTable".
But just to make sure I'm heading down the right path, I don't need to access the TIFF data, just the JPEG preview that Windows Photos can display. Is there a way to do this? [I ended up using an external program and made it as an answer in case it helps someone].

サインインしてコメントする。

 採用された回答

KAE
KAE 2023 年 3 月 3 日
編集済み: KAE 2023 年 3 月 6 日

0 投票

In case it helps someone, here's one approach. The program exiftool contains functions to extract the embedded jpg, and here's how to run it from Matlab,
% Run exiftool.exe from Matlab command line using system
% Format of exiftool command was taken from examples displayed if exiftool
% is run without any arguments
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -a -b -W %d%f_%t%-c.%s -preview:all SomeDngUncompressedFile.dng');
% Creates SomeDngUncompressedFile_PreviewImage.jpg
% Read in the jpg and display it
imshow(imread('SomeDngUncompressedFile_PreviewImage.jpg'));
This worked on the uncompressed version of the DNG files, and not on the compressed.
You can also get helpful info on the uncompressed or compressed file,
% Generate a TXT file containing information about the DNG file including
% the preview thumbnail
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -s -s SomeDngCompressedFile.dng > SomeDngCompressedFile_EXIF.txt')

5 件のコメント

KAE
KAE 2023 年 3 月 6 日
編集済み: KAE 2023 年 3 月 6 日
For some reason Matlab can't access the creation date of a DNG file using "dir" or System.IO.File.GetCreationTime('SomeDngCompressedFile.dng'). Both return the modification date. So, you can get the creation date as
follows,
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -CreateDate SomeDngCompressedFile.dng')
But it will be very slow on large files, see here.
Walter Roberson
Walter Roberson 2023 年 3 月 6 日
編集済み: Walter Roberson 2023 年 3 月 6 日
KAE
KAE 2023 年 3 月 6 日
編集済み: KAE 2023 年 3 月 6 日
Using "system" or "!" from Matlab on my Windows machine resulted in 'getfattr' is not recognized as an internal or external command.' Same error for "ntfsinfo". What am I missing?
Walter Roberson
Walter Roberson 2023 年 3 月 6 日
It looks like the answer might be to use .NET
System.IO.File.GetCreationTime(PATH)
KAE
KAE 2023 年 3 月 7 日
Oddly, that is also showing the file modification date, see here. My final workaround will likely be outside of Matlab and I'll post it when I figure it out! Thank you for all your help.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeEnvironment and Settings についてさらに検索

質問済み:

KAE
2023 年 2 月 28 日

コメント済み:

KAE
2023 年 3 月 7 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by