1.2 图像文件输入/输出函数

本节主要介绍常用格式和特殊格式(如DICOM、HDR、NITF)的图像文件的输入/输出函数。掌握这些函数,读者在MATLAB使用中可方便地读取和保存指定格式的图像文件。

1.2.1 imwrite——把图像写入图形文件中

【功能】 把图像写入图形文件中。

【语法介绍】

● imwrite(A,filename,fmt) 把图像数据A写到指定的图像文件中。字符串参量filename表示指定的图像文件名。参量fmt表示文件格式,即扩展名,具体参见表1.6。参量A可为矩阵(表示灰度图像)或第三维维数为3的三维数组(表示真彩色图像),但不能是一个空矩阵。如果参量fmt为tiff,则A也可为第三维维数为4的三维数组。

● imwrite(X,map,filename,fmt) 把索引图像数据X写到指定的图像文件中。参量X为矩阵。如果X的类型为uint8或uint16,则imwrite将X的真实值写入到指定文件中;如果X的类型为双精度型,则imwrite将X的值转换为uint8(X-1)类型后再写入到指定文件中。参量map为一列数为3的矩阵,表示颜色表。map中的每行表示一种颜色,每行中第一、第二、第三个元素分别指定红色、绿色、蓝色的亮度。

● imwrite(...,filename) 把图像数据写到指定的图像文件中。字符串参量filename为指定的图像文件名(包含扩展名)。

● imwrite(...,param1,val1,param2,val2,...) 指定输出文件的属性param的值val。

表1.6 常用fmt图像类型表

【实例】 读取MATLAB自带的图像,并保存到指定的文件中。

            >>[X,map]=imread('trees.tif');       %读取MATLAB自带的图像
            imshow(X,map)                          %显示图像,如图1.36所示
            filename='myImage';
            fmt='tif';                             %设置保存的文件名和文件类型
            imwrite(X,map,filename,fmt)            %保存图像到指定myImage.tif文件中

图1.36 保存图像到指定文件中

1.2.2 imread——从图像文件中读取图像

【功能】 从图像文件中读取图像

【语法介绍】

● A=imread(filename,fmt) 从指定的图像文件中读取灰度图像或真彩色图像。字符串参量filename表示文件名;字符串参量fmt表示文件类型,具体取值可参见表1.6。

● [X,map]=imread(...) 从指定的图像文件中读取索引图像和颜色表。X为索引图像, map为颜色表,其值自动被调整到[0 1]的范围。

● [...]=imread(filename) 从指定的图像文件中读取灰度图像或真彩色图像。字符串参量filename表示图像文件全名的字符串(包括扩展名)。

● [...]=imread(URL,...) 从网上指定地址读取图像。字符串参量URL表示网址(必须包括协议类型,如http://)。

● [...]=imread(...,idx) 读取CUR图像文件或ICO图像文件中的一幅图像。参量idx为正整数,指定图像文件中被读取图像的序号;一般默认值idx=1。例如,如果idx=3,则读取图像文件中的第3幅图像。

● [A,map,alpha]=imread(...) 返回读取的CUR图像或 ICO图像A、颜色表map以及透明度alpha。

● [...]=imread(...,idx) 读取GIF或TIFF图像文件中的一帧或几帧图像。参量idx为整型变量矩阵,其元素指定图像文件中被读取图像的序号。例如,如果idx=3,则读取文件中的第3帧图像;如果idx=1∶5,则读取前5帧图像。

● [...]=imread(...,'frames',idx) 读取GIF图像文件中的一帧或几帧图像。参量idx为整型变量矩阵或字符串all。当idx为all时,读取图像文件中所有帧图像。当idx为整型变量矩阵时,其元素指定图像文件中被读取图像的序号。例如,如果idx=3,则读取文件中的第3帧图像;如果idx=1∶5,则读取前5帧图像。

● [...]=imread(...,ref) 读取HDF4图像文件中的一幅图像。参量ref为整数,指定图像的参考数。例如,如果ref=12,则读取图像文件中的参考数为12的图像,默认情况下,imread读取HDF4图像文件中的第一幅图像。

【实例1】 读取MATLAB自带的灰度图像。

        >>I=imread('cameraman.tif');           %读取MATLAB自带的灰度图像
        imshow(I)                                %显示灰度图像,如图1.37所示

图1.37 读取MATLAB自带的灰度图像

【实例2】 读取MATLAB自带的索引图像。

        >>  [X,map]=imread('trees.tif');         %读取MATLAB自带的索引图像
        imshow(X,map)                              %显示索引图像,如图1.38所示

图1.38 读取MATLAB自带的索引图像

【实例3】 读取TIFF文件中的第6帧图像。

        >>[X,map]=imread('mri.tif',6);          %读取MATLAB自带的图像
        imshow(X,map)                             %显示图像,如图1.39所示

图1.39 读取TIFF文件中的第6帧图像

【实例4】 读取GIF文件中的前3帧图像,GIF文件由用户自己创建。

        >> filename='C:\Documents and Settings\Administrator\My Documents\my_gif.gif';
        [X,map]=imread(filename,1:3);              %读取GIF文件中的前3帧图像
        size(X)                               %显示矩阵X信息
        %用分区窗口显示每帧图像
        figure;
        for (i=1:3)
        subplot(2,2,i);
        imshow(X(:,:,:,i),map)              %如图1.40所示
        end;
        运行结果:
        ans =
          400   550    1    3

图1.40 读取GIF文件中的前3帧图像

【实例5】 读取GIF文件中的所有图像(6帧),GIF文件由用户自己创建。

        >> filename='C:\Documents and Settings\Administrator\My Documents\my_gif.gif';
        [X,map]=imread(filename,'frames','all');        %读取GIF文件中的前3帧图像
        size(X)                               %显示矩阵X信息
        %用分区窗口显示每帧图像
        figure;
        for (i=1:6)
        subplot(2,3,i);
        imshow(X(:,:,:,i),map)                 %如图1.41所示
        end;
        运行结果:
        ans =
          400   550    1    6

图1.41 读取GIF文件中的所有6帧图像

1.2.3 analyze75info——从analyze7.5数据集头文件中读取信息

【功能】 从analyze 7.5数据集头文件中读取数据信息。

【语法介绍】

● info=analyze75info(filename) 从指定的analyze7.5数据集头文件中读取数据信息。字符串参量filename为文件名。输出参量info为结构变量,表示数据信息。

● info=analyze75info(filename,'ByteOrder',endian) 从指定的analyze7.5数据集头文件中按指定字节顺序读取数据信息。字符串参量endian指定字节顺序,取值参见表1.7。

表1.7 analyze75info函数参量endian取值

【实例】 读取analyze 7.5数据集头文件,analyze 7.5格式文件由用户自己创建,可以在http://www.radiology.uiowa.edu/downloads/下载。

            >> info = analyze75info('CT_HAND.hdr');

1.2.4 analyze75read——读取analyze7.5数据

【功能】 从analyze 7.5数据集图像文件中读取图像数据。

【语法介绍】

● X=analyze75read(filename) 从指定的analyze 7.5数据集图像文件中读取图像数据X。字符串参量filename为文件名。

● X=analyze75read(info) 从指定的analyze 7.5数据集头文件数据信息info中读取图像数据X。参量info通常由analyze75info函数输出得到。

【实例1】 从analyze 7.5数据集图像文件中读取图像数据,analyze 7.5格式文件由用户自己创建,可以在http://www.radiology.uiowa.edu/downloads/下载。

            >> X = analyze75read('CT_HAND');

【实例2】 从analyze7.5数据集头文件中读取信息,然后从信息中读取图像数据,analyze 7.5格式文件由用户自己创建。

            >> info = analyze75info('CT_HAND.hdr');
            X = analyze75read(info);

1.2.5 dicomanon——修改DICOM文件

【功能】 修改DICOM文件信息。

DICOM是Digital Imaging and Communications in Medicine的缩写,表示医学的数字成像和通信。DICOM标准是由美国放射学院(American College of Radiology,ACR)和国家电气制造商协会(National Electrical Manufacturers Association,NEMA)共同制定的。DICOM文件是指按照DICOM标准而存储的医学文件。DICOM文件主要组成部分就是数据集合,这不仅包括医学图像,还包括许多和医学图像有关的信息,如病人姓名、图像大小等。DICOM 数据集合是由DICOM数据元素按照指定的顺序依次排列组成的。

【语法介绍】

● dicomanon(file_in,file_out) 从DICOM文件file_in中删除相关数据元素,创建一个新的DICOM文件file_out。file_out中包含修改的信息。

● dicomanon(...,'keep',FIELDS) 除了 FIELDS 指定的数据元素不修改外,修改其他所有的数据元素。参量FIELDS是一个细胞矩阵。

● dicomanon(...,'update',ATTRS) 修改数据元素,并且更新 ATTRS 指定的数据元素。参量ATTRS是一个细胞矩阵。

【实例】 从文件修改相关数据元素。

            >> dicomanon('patient.dcm','anonymized.dcm')
            >> dicomanon('tumor.dcm','tumor_anon.dcm','keep',...,{'PatientAge','PatientSex','StudyDescription'})

1.2.6 dicomdict——获得DICOM数据目录

【功能】 获得或设置DICOM数据目录。

【语法介绍】

● dicomdict('set',dictionary) 设置DICOM数据的目录文件。字符串参量dictionary表示DICOM数据的目录文件名。

● dictionary=dicomdict('get') 返回DICOM数据的目录文件名。

● dicomdict('factory') 重置DICOM数据的目录文件为默认值。

【实例】 获取DICOM数据目录信息。

            >> dictionary = dicomdict('get')
            运行结果:
            dictionary =
            D:\MATLAB\R2008a\toolbox\images\medformats\dicom-dict.txt

1.2.7 dicominfo——从DICOM文件中读取元数据信息

【功能】 从DICOM文件中读取元数据信息。

【语法介绍】

● info=dicominfo(filename) 从指定的DICOM文件中读取元数据信息。字符串参量filename为DICOM文件名。

● info=dicominfo(filename,'dictionary',D) 使用 DICOM 数据目录文件 D 从指定的DICOM文件filename中读取元数据信息。

【实例】 从CT-MONO2-16-ankle.dcm文件中读取元数据信息。

            >> info = dicominfo('CT-MONO2-16-ankle.dcm')

            运行结果:
            info =

                Filename: [1x61 char]
                FileModDate: '18-十二月-2000 12:06:44'
                FileSize: 525436
                Format: 'DICOM'
                FormatVersion: 3
                Width: 512
                Height: 512
                BitDepth: 16
                ColorType: 'grayscale'
                FileMetaInformationGroupLength: 192
                FileMetaInformationVersion: [2x1 uint8]
                MediaStorageSOPClassUID: '1.2.840.10008.5.1.4.1.1.7'
                MediaStorageSOPInstanceUID: [1x50 char]
                TransferSyntaxUID: '1.2.840.10008.1.2'
                ImplementationClassUID: '1.2.840.113619.6.5'
                ImplementationVersionName: '1_2_5'
                SourceApplicationEntityTitle: 'CTN_STORAGE'
                IdentifyingGroupLength: 414
                ImageType: 'DERIVED\SECONDARY\3D'
                SOPClassUID: '1.2.840.10008.5.1.4.1.1.7'
                SOPInstanceUID: [1x50 char]
                StudyDate: '1993.04.30'
                SeriesDate: '1993.04.30'
                ContentDate: '1993.04.30'
                StudyTime: '11:27:24'
                SeriesTime: '11:27:24'
                ContentTime: '11:27:24'
                Modality: 'CT'
                ConversionType: 'WSD'
                Manufacturer: 'GE MEDICAL SYSTEMS'
                InstitutionName: 'JFK IMAGING CENTER'
                ReferringPhysicianName: [1x1 struct]
                StationName: 'CT01OC0'
                StudyDescription: 'RT ANKLE'
                PhysicianReadingStudy: [1x1 struct]
                OperatorName: [1x1 struct]
                ManufacturerModelName: 'GENESIS_ZEUS'
                PatientGroupLength: 18
                PatientName: [1x1 struct]
                AcquisitionGroupLength: 10
                SoftwareVersion: '03'
                RelationshipGroupLength: 134
                StudyInstanceUID: [1x48 char]
                SeriesInstanceUID: [1x48 char]
                SeriesNumber: 365
                InstanceNumber: 1
                ImagePresentationGroupLength: 168
                SamplesPerPixel: 1
                PhotometricInterpretation: 'MONOCHROME2'
                Rows: 512
                Columns: 512
                BitsAllocated: 16
                BitsStored: 16
                HighBit: 15
                PixelRepresentation: 1
                SmallestImagePixelValue: 0
                PixelPaddingValue: 0
                WindowCenter: 1024
                WindowWidth: 4095
                RescaleIntercept: -1024
                RescaleSlope: 1
                RescaleType: 'US'
                PixelDataGroupLength: 524296

1.2.8 dicomlookup——寻找DICOM文件的属性

【功能】 在DICOM数据目录中寻找某个元素的属性。

【语法介绍】

● name=dicomlookup(group,element) 在当前 DICOM 数据目录中寻找指定元素element和属性group的信息,参量group和element为包含十进制的数值或十六进制的字符串。

● [group,element]=dicomlookup(name) 在当前 DICOM 数据目录中寻找指定属性name的信息。

【实例】 通过属性名称'TransferSyntaxUID'寻找DICOM数据目录中对应的标识。

            >> [group,element] = dicomlookup('TransferSyntaxUID')

            运行结果:
            group =

                2



            element =

                16

1.2.9 dicomread——从DICOM文件中读取图像

【功能】 读取DICOM图像。

【语法介绍】

● X=dicomread(filename) 从DICOM文件filename中读取图像数据。如果filename为单幅灰度图像,则X为矩阵;如果filename为对于单幅真彩色图像,则X为第三维维数为3的三维数组;如果filename为多帧图像,则X通常为四维数组。

● X=dicomread(info) 从DICOM数据信息结构info中读取图像数据。参量info由函数dicominfo输出得到。

● [X,map]=dicomread(...) 从DICOM文件中读取图像数据X和颜色表map。如果X为灰度图像或真彩色图像数据,则map为空矩阵。

● [X,map,alpha]=dicomread(...) 返回图像数据X、颜色表map和透明度矩阵alpha。

● [X,map,alpha,overlays]=dicomread(...) 返回图像数据X、颜色表map、透明度矩阵alpha和所有DICOM文件中覆盖图overlays。

● [...]=dicomread(filename,'frames',v) 从DICOM文件filename中读取指定的几帧图像。参量v为一个整型向量或字符串all。当v为all时,dicomread读取所有的图像信息。当 v 为整型向量时,其元素指定图像文件中被读取图像的序号。例如,如果idx=3,则读取文件中的第3帧图像;如果idx=1:5,则读取前5帧图像。

【实例1】 读取图像数据X和颜色表map,创建多帧图像。

            >>[X,map]=dicomread('US-PAL-8-10x-echo.dcm');    %读取10帧图像
            montage(X,map);                                    %显示读取的10帧图像,如图1.42所示

图1.42 读取DICOM图像并创建10帧图像

【实例2】 从DICOM元数据结构中读取图像数据。

            >>info=dicominfo('CT-MONO2-16-ankle.dcm');  %读取DICOM元数据结构
            Y=dicomread(info);                            %从DICOM元数据结构info中读取图像数据
            figure
            imshow(Y,'DisplayRange',[]);                  %显示图像,如图1.43所示

图1.43 从DICOM元数据结构中读取图像数据

1.2.10 dicomuid——生成DICOM文件标识符

【功能】 生成DICOM文件标识符。

【语法介绍】

● UID=dicomuid 创建一个新的DICOM文件标识符字符串UID。

【实例】 生成DICOM文件标识符。

            >> UID = dicomuid
            运行结果:
            UID =
            1.3.6.1.4.1.9590.100.1.1.317313387012083026832251444973071480553

1.2.11 dicomwrite——把图像写入DICOM文件

【功能】 将图像写入DICOM文件中。

【语法介绍】

● dicomwrite(X,filename) 将二值、灰度、真彩色图像X写入DICOM文件filename中。参量字符串filename为生成的DICOM文件名。参量X为矩阵(二值或灰度图像)或第三维维数为3的三维数组(真彩色图像)。

● dicomwrite(X,map,filename) 将索引图像X和颜色表map写入DICOM文件filename中。参量map为一列数为3的矩阵,表示颜色表。参量X为矩阵。

● dicomwrite(...,info,...) 按照指定数据信息结构info将图像写入DICOM文件中。参量info由函数dicominfo输出得到。

● status=dicomwrite(...) 返回数据信息和写入的DICOM文件的描述信息。

【实例1】 从DICOM文件中读取CT图像,然后将图像写入sc_file.dcm文件中。

            >> X = dicomread('CT-MONO2-16-ankle.dcm');
            dicomwrite(X,'sc_file.dcm');

【实例2 从DICOM文件中获取元数据信息,然后将元数据中的图像写入ct_file.dcm文件中。

            >> metadata = dicominfo('CT-MONO2-16-ankle.dcm');
            dicomwrite(X,'ct_file.dcm',metadata);

【实例3】 复制文件中的所有元数据。

            >> X = dicomread('CT-MONO2-16-ankle.dcm');
            metadata = dicominfo('CT-MONO2-16-ankle.dcm');

1.2.12 getframe——获取动画帧

【功能】 获取动画帧。

【语法介绍】

● getframe 返回一帧动画,即当前图形窗口或轴的一个快照(截屏)。

● F=getframe 从当前轴获取一帧动画。

● F=getframe(h) 从句柄为h的图形窗口或轴获取一帧动画。

● F=getframe(h,rect) 从句柄为h的图形窗口或轴的指定区域获取一帧动画,参量rect为四元素向量([xmin,ymin,xmax,ymax]),(xmin,ymin)表示矩阵区域左下角端点的坐标,(xmax,ymax)表示矩阵区域右上角端点的坐标。

【实例1】 使用getframe函数获取一帧图像。

        >>F=getframe(gcf);             %从当前窗口获取一帧动画
        image(F.cdata)                   %显示图像,如图1.44所示
        colormap(F.colormap)             %设置图像颜色表

图1.44 获取一帧动画图像

【实例2】 由peaks函数创建动画。

        >> %读取并显示peaks函数
        Z = peaks;
        surf(Z)                        %如图1.45所示

图1.45 由peaks函数创建动画

        axis tight
        set(gca,'nextplot','replacechildren');
        % 循环制作20帧动画
            for j = 1:20
                surf(sin(2*pi*j/20)*Z,Z)
                F(j)=getframe;            %通过循环语句获取20帧动画
            end
            %播放动画20次
            movie(F,20)

【实例3 从显示图像中截取一部分,生成一幅图像。

            >>h=figure;                %新建图形窗口
            imshow('pout.tif');          %显示原始图像,如图1.46所示
            rect=[100,100,150,150];      %设定区域
            F=getframe(h,rect);          %获取图像
            figure;
            image(F.cdata)               %显示图像,如图1.47所示
            colormap(F.colormap)         %设置图像颜色表

图1.46 原始图像

图1.47 从原始图像中截取一部分生成一幅图像

1.2.13 imfinfo——返回图形文件的信息

【功能】 返回图形文件的信息。

【语法介绍】

● info=imfinfo(filename,fmt) 返回指定的图像文件的信息。字符串参量filename表示图像文件名。字符串参量fmt为图像文件类型,具体取值可参见表1.6。info为图像信息结构,具体可参见表1.8。

● info=imfinfo(filename) 返回指定的图像文件filename的信息。

● info=imfino(URL,...) 返回网上指定的图像的信息,字符串参量URL为网址(包括协议类型,如http://)。

表1.8 图像信息表

【实例】 读取图形文件canoe.tif的信息。

        >> info = imfinfo('canoe.tif')

        运行结果:
        info =


        Filename: 'D:\MATLAB\R2008a\toolbox\images\imdemos\canoe.tif'
        FileModDate: '04-十二月-2000 13:57:56'
        FileSize: 69708
        Format: 'tif'
        FormatVersion: []
        Width: 346
        Height: 207
        BitDepth: 8
        ColorType: 'indexed'
        FormatSignature: [73 73 42 0]
        ByteOrder: 'little-endian'
        NewSubFileType: 0
        BitsPerSample: 8
        Compression: 'PackBits'
        PhotometricInterpretation: 'RGB Palette'
        StripOffsets: [9x1 double]
        SamplesPerPixel: 1
        RowsPerStrip: 23
        StripByteCounts: [9x1 double]
        XResolution: 72
        YResolution: 72
        ResolutionUnit: 'Inch'
        Colormap: [256x3 double]
        PlanarConfiguration: 'Chunky'
        TileWidth: []
        TileLength: []
        TileOffsets: []
        TileByteCounts: []
        Orientation: 1
        FillOrder: 1
        GrayResponseUnit: 0.0100
        MaxSampleValue: 255
        MinSampleValue: 0
        Thresholding: 1

1.2.14 hdrread——读取HDR图像

【功能】 读取HDR图像。

HDR是High Dynamic Range的缩写,即高动态范围,如高动态范围图像(HDRI)或者高动态范围渲染(HDRR)。动态范围是指信号最高和最低值的相对比值。HDR 是一个简单的术语,HDR照片是使用多张不同曝光的图片,然后再用软件将其叠加合成一张图片。HDR照片的优势是最终你可以得到一张无论在阴影部分还是高光部分都有细节的图片,而在正常的摄影当中,或许只能选择两者之一。简单来说,HDR照片可以用3句话来概括:亮的地方可以非常亮;暗的地方可以非常暗;亮暗部的细节都很明显。

【语法介绍】

● hdr=hdrread(filename) 从指定的 HDR 图像文件中读取图像数据。字符串参量filename表示HDR图像文件名。输出参量hdr为第三维维数为3的三维数组,表示读取的HDR图像数据,数据类型为单精度数值型,数值范围为[0 inf]。

【实例】 读取并显示HDR图像。

            >>hdr=hdrread('office.hdr');        %读取HDR图像
            rgb=tonemap(hdr);                     %将HDR图像转换为RGB图像
            imshow(rgb);                          %显示图像,如图1.48所示

图1.48 读取并显示HDR图像

1.2.15 hdrwrite——将HDR图像写入文件

【功能】 将HDR图像写入图像文件。

【语法介绍】

● hdrwrite(hdr,filename) 将HDR图像数据写入到指定的文件中。字符串参量filename表示文件名。参量hdr为第三维维数为3的三维数组,表示HDR图像数据,其数据类型为单精度或双精度型,数值范围为[0 inf]。

【实例】 读取HDR图像并将其保存至MyFile.hdr文件中。

        >>hdr=hdrread('office.hdr');          %读取HDR图像
        rgb=tonemap(hdr);                       %将HDR图像转换为RGB图像
        figure;
        subplot(1,2,1);
        imshow(rgb);                            %显示图像,如图1.49所示
        filename ='MyFile.hdr';
        hdrwrite(hdr,filename)                  %将HDR图像写入MyFile.hdr文件中
        hdr1=hdrread('MyFile.hdr');             %读取保存的HDR图像
        rgb1=tonemap(hdr1);                     %将HDR图像转换为RGB图像
        subplot(1,2,2);
        imshow(rgb1);                           %显示图像,如图1.49所示

图1.49 读取HDR图像并将其保存至MyFile.hdr文件中

1.2.16 interfileinfo——从Interfile文件中读取图像信息

【功能】 从Interfile文件中读取图像信息。

【语法介绍】

● info=interfileinfo(filename) 从指定的interfile文件中读取文件中的图像信息。字符串参量filename表示文件名。输出参量info为结构体变量,表示interfile文件中的图像信息。

【实例】 从 Interfile 文件中读取元数据信息。Interfile 文件由用户自己创建,可以从http://www.medphys.ucl.ac.uk/interfile/下载。

            >> info = interfileinfo('MyFile.hdr');

1.2.17 interfileread——从Interfile文件中读取图像

【功能】 从Interfile文件中读取图像。

【语法介绍】

● A=interfileread(filename) 从指定的Interfile文件中的第一个能量窗口中读取图像到A。字符串参量filename为Interfile文件名。若读取的图像为单帧图像,则A为矩阵。若读取的图像为多帧图像,则A为三维数组。

● A=interfileread(filename,window) 从指定的Interfile文件中的指定的能量窗口读取图像到A。参量window 为整数,表示指定的能量窗口。

【实例】 从 Interfile 文件中读取图像。Interfile 文件由用户自己创建,可以从http://www.medphys.ucl.ac.uk/interfile/下载。

            >> img = interfileread('MyFile.hdr');

1.2.18 makehdr——创建HDR图像

【功能】 创建HDR图像。

【语法介绍】

● HDR=makehdr(files) 由一组位于细胞矩阵文件files中的低动态图像序列生成单精度HDR图像,这些细胞矩阵文件必须包含EXIF图像曝光元数据,以用于HDR图像计算的基本曝光量。

● HDR=makehdr(files,param1,val1,...) 使用指定参数param和参数值val从低动态图像中创建HDR图像。参量param1,val1,...的具体意义参见表1.9。

表1.9 makehdr参数表

【实例】 从6幅低动态图像序列中生成高动态范围图像,6幅图像具有相同的f/stop数和不同的曝光时间。

            >> %设置文件列表
            files = {'office_1.jpg','office_2.jpg','office_3.jpg','office_4.jpg','office_5.jpg','office_6.jpg'};
            %设置曝光时间
            expTimes = [0.0333,0.1000,0.3333,0.6250,1.3000,4.0000];
            %循环显示图像
            for i=1:6
            figure;
            imshow(files{i});                %循环显示不同曝光时间的图像,如图1.50所示
            end
            %创建HDR图像
            hdr = makehdr(files,'RelativeExposure',expTimes ./ expTimes(1));
            %将HDR图像转换为RGB图像
            rgb = tonemap(hdr);
            %显示图像
            figure;
            imshow(rgb)                       %显示HDR图像,如图1.51所示

图1.50 显示不同曝光时间的HDR图像

图1.51 显示创建HDR图像

1.2.19 nitfinfo——从NITF文件中读取元数据信息

【功能】 从NITF文件中读取元数据信息。

【语法介绍】

● metadata=nitfinfo(filename) 从指定的 NITF 文件中读取元数据信息。字符串参量filename为NITF文件名。输出参量metadata为结构数组,表示返回的元数据信息。

1.2.20 nitfread——从NITF文件中读取图像

【功能】 从NITF文件中读取图像。

【语法介绍】

● X=nitfread(filename) 从指定的NITF文件中读取第一帧图像。字符串参量filename为NITF文件名。

● X=nitfread(filename,idx) 从指定的NITF文件中读取指定的图像。参量idx为整数,表示指定图像的序号。