matlab里的图像处理函数

一、imfinfo函数——查看图像文件信息,注意参数是文件路径和文件名,不是图像对应的矩阵

>> imfinfo('C:\Users\zhulf\Desktop\1.jpg')

ans = 


           Filename: 'C:\Users\zhulf\Desktop\1.jpg'
        FileModDate: '19-Apr-2015 08:40:54'
           FileSize: 1528413
             Format: 'jpg'
      FormatVersion: ''
              Width: 1548
             Height: 1548
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {}
               Make: 'Smartisan'
              Model: 'Smartisan T1'
        Orientation: 0
           DateTime: '2015:04:19 08:40:53'
      DigitalCamera: [1x1 struct]
            GPSInfo: [1x1 struct]
       MeteringMode: 'unknown'
        LightSource: 'unknown'
              Flash: 16

二、imshow函数

1、imshow(I)  显示图像I

Matlab代码:

>> I=imread('2.jpg');

>> imshow(I)

 

显示结果

 

2、imshow(I,[low high])  它显示的是像素处理后的图像I,注意的是它只是显示的时候改变了图像像素,实际上并没有改变图像像素,图像像素值还是原来的值。

Matlab代码:

>> I=imread('2.jpg');

>> imshow(I,[0 80])

 

 

 

它对图像像素的处理是:将I中像素值大于等于high变成high,将小于等于low的变成low,再将[low,high]中间的像素映射为默认的像素级一般为[0,255]

我们把上述描述转为代码:

I=imread('2.jpg');

mmax=max(I(:));

mmin=min(I(:));

for i=1:256

    for j=1:256

        if I2(i,j)<=0 I2(i,j)=0;

        elseif I2(i,j)>=80

            I2(i,j)=255;

        end

    end

end

I3=I2;

for i=1:256

    for j=1:256

        I3(i,j)=255/80*I3(i,j);

    end

end

imshow(I3)

显示图像结果为

 

 

 

和imshow(I,[0 80])效果是一样的。

3、 imshow(I,[ ])  它等同于imshow(I,[min(I:),max(I:)]),可以理解为把图像I转化成0-255灰度级来显示。

我们在这里做一个实验:下面三幅图分别为imshow(I),imshow(I,[])和把图像像素值映射为[0,255]所显示的图像。

 

 

 

 

 

我们发现,imshow(i,[])显示的效果正和把像素值映射为[0,255]效果所显示的一样。

Matlab代码如下:

A=imread('C:\Users\zhulf\Desktop\Image1 - SliceImage - 008.tif');

mmax=max(A(:));

mmin=min(A(:));

for i=1:4096

    for j=1:4096

        

      A2(i,j)=1.0*255/(mmax-mmin)*(A(i,j)-mmin);

    end

end

imshow(A)

figure,imshow(A,[])

figure,imshow(A2)

 

 

再例如,一个灰度级为17-2424的int16类型的图像,matlab显示(imshow(I))效果如下,

 

 

 

 

可见,显示效果并不好,接下来我们使用imshow(I,[]),显示结果如下:

 

 

 

显示结果较好,对比度较高。同样,imshow(I,[])的效果等同于把像素映射到0-255灰度级,映射后图像如下:

 

 

 

实现灰度映射的Matlab如下:

A=dicomread('C:\Users\zhulf\Desktop\IM62.dcm');

mmax=double(max(A(:)));  %类型转换很重要

mmin=double(min(A(:)));  %类型转换很重要

 

for i=1:512

    for j=1:512

        tmp=double(A(i,j));  %类型转换很重要

        A2(i,j)=uint8(255*(tmp-17)/2407);  %类型转换很重要

    end

end

imshow(A)

figure,imshow(A,[])

figure,imshow(A2)

 

上面是对imshow()函数的理解,不明白的欢迎留言交流。

 

三、rgb2gray 将彩色图像转换为灰度图像

>> A=imread('C:\Users\zhulf\Desktop\1.jpg');
>> B=rgb2gray(A);
>> imshow(A)

 

>> figure,imshow(B)

 

四、数据类型转换函数

im2uint8  将图像转换为uint8类,相应的像素值也会变化到相应范围,如对uint16类图像应用im2uint8,则像素值由0-65535变化成0-255,这是一种线性映射。

im2uint16 将图像转换为uint16类,也有上面如此的性质。

im2double 将图像转化为double类,必要时缩放像素值。如果图像img是double型的,d=img;如果图像是logical或single型图像,d=double(img);如果图像是uint8型,d=double(img)/255;如果图像是uint16型,d=double(img)/65535。

im2double一般会将uint8归一化到[0,1],而double只是将数据变为double,如:

a = uint8(250);
b = double(a)
c = im2double(a)


b =


   250




c =


    0.9804

 

im2single 将图像转化为single类,性质和im2single类似。

 

mat2gray 可以将图像转换为标定[0,1]范围的double类的图像。

调用的语法是:

g=mat2gray(A,[Amin,Amax]),其中g具有0(黑)到1(白)的值。参数Amin使得A中小于Amin的值,在g中变为0;而在A中大于Amax的值,在g中变为1。

也可以是:

g=mat2gray(A),

Amin,Amax默认为A中实际的最大值和最小值,它独立于输入的类,将整个输入值的范围标定为[0,1]。

>> f=[1 2;3 4]


f =


     1     2
     3     4


>> g=mat2gray(f)


g =


         0    0.3333
    0.6667    1.0000

 BW = im2bw(I,LEVEL)   二值化图像,将大于LEVEL的像素值变为1,小于LEVEL的像素值变为0,且图像像素变成逻辑类;LEVEL是阈值,在[0,1]之间。

>> gb=im2bw(g,0.6)


gb =


     0     0
     1     1

>> gbv=islogical(gb)


gbv =


     1

五、whos 

B为图像矩阵

>> whos B
  Name         Size                Bytes  Class    Attributes


  B         1548x1548            2396304  uint8     

六、反转图像

>> I=imread('C:\Users\zhulf\Desktop\2.jpg');

>> imshow(I)

 

上下翻转:

>>I2=I(end:-1:1,:);

>> figure,imshow(I2)

 

上下左右均反转:

>> I3=I(end:-1:1,end:-1:1);
>> figure,imshow(I3)

 

七、抽取图像(压缩图像)

>> I4=I(520:855,90:837);
>> figure,imshow(I4)

图像也由原来的1548 x 1548变成了336 x 748。

 

>> I5=I(1:2:end,1:2:end);
>> figure,imshow(I5)

图像由1548 x 1548 变成了774 x 774,filesize由99745变成了76747,做了部分压缩,但清晰度差不多。

八、improd()函数

function[p,pmax,pmin,pn]=improd(f,g) 
%IMPROD Computes the produce of two images. 
%[P,PMAX,PMIN,PN]=IMPROD(F,G) outputs the element-by-element 
%product of two input images,F and G,the product 
%maximum and minimum values,and a normalized product array with 
%values in the rang[0,1].The input images must be of the same 
%size.They can be of class uint8,uint16,or double. The outputs 
%are of class double. 
fd=double(f); 
gd=double(g); 
p=fd.*gd; 
pmax=max(p(:)); 
pmin=min(p(:)); 
pn=mat2gray(p); 

 

>> [p,pmax,pmin,pn]=improd(f,g)


p =


     1     4
     6     4




pmax =


     6




pmin =


     1




pn =


         0    0.6000
    1.0000    0.6000

之后陆续补充。。

  • 72
    点赞
  • 481
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值