一周学习内容总结(第一章至第三章的第三节)

本文介绍了如何使用MATLAB进行图像处理,包括图像读取、显示、保存、亮度变换、对数变换、对比度拉伸变换及直方图生成等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像操作

读取图像

使用imread函数可以将图像读入到MATLAB环境中,如果参数中不包含任何路径时,该函数会从当前目录中寻找该文件。正如如下调用

t=imread('sin.png');

如下图为函数imread和imwrite所支持的一些图像格式
这里写图片描述
另外,函数size可给出一幅图像的函数和列数。

>> size(t)

ans =
  900        1200           3

显示图像

使用函数imshow显示。
调用imshow时如果不写第二个参数的话,将把灰度级默认设为256。

t=imread('temp_01.jpg');
imshow(t);

效果如下。(1)
这里写图片描述

第二次调用imshow时,我设置了一个范围,作为第二个参数。

figure,imshow(t,[10 120]);

效果如下。

这里写图片描述

原因:设置第二个参数后,会将所有小于等于10的值都显示为黑色,所有大于等于120的值显示为白色。
关于figure的用法:如果再需要显示一张图片时,MATLAB会用新图像代替旧图像,所以,调用figure的话,就可以直接打开一个新的窗口来显示图片。

保存图像

1.使用函数imwrite可以将图像写到磁盘上,比如:

imwrite(t,'C:\Users\sh qian\Documents\MATLAB\1.jpg','quality',34)

其中后两个参数只适用于jpeg图像,数字(整数)的范围为0到100,用于压缩,数字越小,图像就越不清楚。

2.使用函数imfinfo可以获得该图像的详细信息。

imfinfo('changed.jpg')

ans = 
           Filename: 'C:\Users\sh qian\Documents\MATLAB\changed.jpg'
        FileModDate: '17-Jun-2017 20:06:46'
           FileSize: 46601
             Format: 'jpg'
      FormatVersion: ''
              Width: 1448
             Height: 891
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {2x1 cell}

亮度变换

1.函数imadjust是对灰度图像进行亮度变换的基本IPT工具。

我的第一种调用方式如下:

g1=imread('test4.jpg');
g=imadjust(g1,[0 1],[1 0]);
figure,imshow(g);

效果如下:
这里写图片描述

与图(1)相比,其中的黑白颜色正好颠倒。这种获得明暗反转图像的过程可用于增强嵌入在黑色区域的白色或灰色细节。

第二种调用方式如下:

g=imadjust(g1,[],[],2);
figure,imshow(g);

效果如下:
这里写图片描述

与图(1)相比,整体更暗了一些。其中2代表gamma参数,意思是,若gamma小于1,则映射被加权至更亮的输出值。若gamma大于1,则映射被加权至更暗的输出值。若省略,则默认为1。

对数变换

g=im2uint8(mat2gray(log(1+double(g1))));
figure,imshow(g);

效果如下:
这里写图片描述

很明显,与图(1)相比,变淡了很多。原因是使用对数变换减小了动态范围。

对比度拉伸变换

首先有一个对比度拉伸函数:
s=T(r)=1/1+(m/r)^E,其中r是输入图像的亮度,s是输出图像的相应亮度值,E控制该函数的斜率。
具体代码如下:

g=1./(1+(50./(double(g1)+eps)).^20);
figure,imshow(g);

效果如下:
这里写图片描述

经过这个函数后,输入值低于50的灰度级压缩为输出图像中较暗灰度级的较窄范围内;类似的,可将输入值高于50的灰度级压缩为输出图像中较亮灰度级的较窄范围内。输出的是一幅具有高对比度的图像。

2.图像处理

直方图生成并绘制

1.使用imhist函数

1.最简方法是指定未输出的函数

 b=imread('temp_01.jpg');
 imhist(b)

执行结果如下:

这里写图片描述

可以观察出灰度值在150左右的频数最高。当然,可以通过设置第二个参数把亮度范围进行进一步分割。从视觉效果上,这种直方图显得有些’挤’。因此matlab提供了其他的函数来绘制。

2.使用bar函数

使用这种函数生成的,我们通常称为条形图,而且还可以设置每一条的宽度。
具体看一下怎么用的。

 h=imhist(b);
 y=h(1:10:256);
 x=1:10:256;
 bar(x,y);

生成结果如下:

这里写图片描述

是不是比直方图看起来舒服点呢。。。。
其中x是一个行向量,它包含了将被绘制的点,y是一个与x有着相同维数的向量,它包含水平标度值的增量。我们通常会将水平轴等分为几段,用来降低水平轴的分辨率。
另外我们还可以使用IPT提供给我们的函数,来设置垂直轴和水平轴的范围。

 h=imhist(b);
 y=h(1:10:256);
 x=1:10:256;
 bar(x,y);
 axis([0 255 0 15000])
 set(gca,'xtick',0:50:255);
 set(gca,'ytick',0:2000:15000);

注意最后三行代码,首先调用了axis函数,设置了水平轴和垂直轴的最大最小值。最后两行,gca代表”获得当前轴”,xtick和ytick按所示的间隔设置水平轴和垂直轴的刻度。

我们还可以调用xlabel和ylabel函数来表示水平轴和垂直轴的含义。

xlabel('这是我的x轴');
ylabel('这是我的y轴');

整体效果如下:
这里写图片描述

3.使用stem函数

调用这个函数可以呈现一幅杆状图,一种简单的用法如下:

 h=imhist(b);
 y=h(1:10:256);
 x=1:10:256;
 stem(x,y,'fill');
 axis([0 255 0 15000])
 set(gca,'xtick',0:50:255);
 set(gca,'ytick',0:2000:15000);

效果如下:

这里写图片描述

其中stem函数中,x,y的含义和条形图一致,’fill’参数可以把标记点涂匀。

4.使用plot函数

调用这个函数可将一组点用直线连接起来。这个函数经常用于频繁显示变换函数 。

用法如下:

 h=imhist(b);
 plot(h);
 axis([0 255 0 15000])
 set(gca,'xtick',0:50:255);
 set(gca,'ytick',0:2000:15000);

效果如下:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值