实验一 图像的显示运算与灰度变

实验介绍了如何使用Matlab进行图像的读写、显示、灰度变换和直方图处理。包括imread/imwrite函数的运用,imshow显示图像,imadjust进行亮度调整,以及histeq进行直方图均衡化以增强图像对比度。实验还涉及到了图像直方图的绘制和不同绘图函数的比较。
摘要由CSDN通过智能技术生成

实验一 图像的显示运算与灰度变换

  1. 实验目的

  1. 熟悉Matlab图像运算的基础——矩阵运算;

  1. 熟悉图像矩阵的显示方法(灰度、彩色);

  1. 熟悉亮度变换函数的使用

  1. 熟悉灰度图像的直方图的表示;

  1. 掌握图像增强的基本方法:灰度变换、直方图均衡;

  1. 实验内容

  1. Matlab图像处理工具箱的初步练习。

  1. 练习图像读写命令imread和imwrite等函数进行图像文件显示、存储、运算。

  1. 灰度线性变换、灰度直方图、直方图均衡处理;

  1. 灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。

  1. 实验原理

点击Matlab快捷键图标, 打开Matlab的工作窗(或指令窗)

Matlab的使用方式

①指令行操作之直接交互工作方式;

②使用matlab编程语言之程序设计方式.

交互方式的使用:

在Matlab工作窗中一般输入以下三种指令行:

①命令

②表达式

③赋值语句:变量 = 表达式;

基本命令:

键盘快捷键——上、下箭头的使用

clc %清除指令窗口

clear %从内存中清除变量和函数

clf %清除当前图

cd %改变或显示当前工作目录

基本函数:

  1. 矩阵索引

在Matlab中,矩阵可以很方便地用一列被方括号括起并用分号隔开的行向量表示。

例如:>>A = [1 2 3; 4 5 6; 7 8 9]

冒号操作符“:”的使用——枚举

例如:>>B = A(:, 2) %将第二列提取出来,相当于>>B = A(1:3, 2)

实验报告

1. 请自行输入一个矩阵并随意提取行列。

  1. 读取图像

imread %将图像读入MATLAB环境,语法为:

imread(‘filename’)

例:>>f = imread('E:\教学课件\医学图像处理\实验讲义\实验一\实验一用图像\lena_gray.bmp') %将图像二维矩阵赋给了二维数组f,单击左侧Workspace窗口,察看二维数组f的值。

size %确定矩阵的维数,语法为:

>>size(f)

下面的语法将自动确定一幅图像的大小,即将行和列的大小数值赋给矩阵[M,N]

>>[M,N] = size(f)

whos %列出图像(实际是数组形式存储)的基本信息

>>whos f

matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像

实验报告

2. imread函数读取实验一图像文件夹中图像,.bmp和.jpg格式各一个;

imshow函数显示各图像;

并用size函数和whos函数查看图像信息,并记录(注明每个图像名称、信息内容)。

  1. 显示图像

imshow %显示图象,语法为:

>>imshow(f, G) %G是显示该图像的灰度级(数字),若将G省略,则默认的灰度%级是256。

>>imshow(f, [low high]) %将所有小于或等于low的值都显示为黑色,即为%0;所有大于或等于high的值显示为白色,即255。

>>imshow(f, [ ]) %能自动调整灰度级动态范围

impixelinfo %显示单个像素的亮度值(灰度级),处理彩色图像时,其RGB分量也显示出来。

实验报告

3. 用imshow(f)显示原图, imshow(f, [ ])函数显示图像“chest-xray”灰度级自动动态调整后的图像以及128灰度级图像,与原图像比较,观察发生了什么变化,并记录。

对图像“lena_gray”和“lena_color”使用impixelinfo函数,观察彩色和灰度图像的坐标点、灰度级大小。截图记录任一点的数据。

  1. 画图

plot %该函数将一组点用直线连接起来,形成曲线图

例:>>f = imread('E:\教学课件\医学图像处理\实验讲义\实验一\实验一用图像\rose.bmp')

>>g=f(257:768, 257:768)

>>imshow(g)

>>h=f(512, :)

>>plot(h) %显示rose图像中部一条水平扫描线,曲线图。

实验报告

4. 对图像“rose”使用plot函数,观察水平扫描线的曲线图。

  1. 保存图像

imwrite %将图像保存到磁盘上,语法为:

>>imwrite(f, ‘filename’) %若filename中不包含路径信息,则imwrite会将文%件保存到当前的工作目录中。

例:>>imwrite(f, 'E:\教学课件\医学图像处理\实验讲义\实验一\load.bmp')

另一种常用但只适用于JPEG(后缀为.jpg)格式图像的函数imwrite语法为:

>> imwrite(f, ‘filename’, ‘quality’, q) %q是一个在0到100之间的整数

例:>>imwrite(f, 'E:\教学课件\医学图像处理\实验讲义\实验一\load15.jpg', 'quality', 15)

实验报告

5. 用imwrite(f, ‘filename’)函数保存已经切割的bmp格式图像“rose”

imwrite(f, ‘filename’, ‘quality’, q)函数保存jpg格式图像“bubbles”,q值分别取:50,25,15,5,0并做比较

6)函数imadjust

函数imadjust是对灰度图像进行亮度变换的基本命令,语法为:

g = imadjust(f, [low_in high_in], [low_out high_out], gamma)

将图像f中的亮度值(灰度值)映射到新图像g中,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in以下的灰度值映射为low_out,high_in以上的灰度值映射为high_out,函数imadjust的矩阵[ ]内参数均指定在0和1之间,[low_in high_in]和[low_out high_out]使用空矩阵[ ]会得到默认值[0 1]。

若high_out小于low_out,则输出图像会反转。

参数gamma指定了曲线(变换函数)的形状,若gamma小于1,则映射被加权至更高(更亮)的输出值;若gamma大于1,则映射被加权至更低(更暗)的输出值。若省略了函数的参量gamma,则gamma默认为1——即线性映射。

>>f = imread(‘filename’)

>>imshow(f)

>>g1 = imadjust(f, [0 1], [1 0]); %图像反转

>>figure, imshow(g1) %figure命令表示同时显示多个窗口

>>g2 = imadjust(f, [0.5 0.75], [0 1]);

%将0.5至0.75之间的灰度级扩展到范围0和1之间

>>figure, imshow(g2)

>>g3 = imadjust(f, [ ], [ ], 2) %使用gamma值

>>figure, imshow(g3)

实验报告

6. 对图像breast.bmp进行亮度变换函数imadjust实验,分别写出图像反转、灰度变换、gamma取0.5和2的MATLAB程序,观察对比结果

7)直方图处理与函数绘图

图像的直方图定义为离散函数:

h(rk) = nk

绘制图像的直方图,函数imhist,语法为:

h = imhist(f, b)

f为输入图像,h为直方图h(rk),b是用于形成直方图的灰度级个数,若b省略,则默认值为256。

>>imhist(f) %MTALAB默认显示的图像f的直方图

函数numel(f)可给出图像f的象素个数,有了它可归一化直方图:

p = imhist(f, b) / numel(f)

MATLAB中其它一些有代表性的绘制函数选项:

  1. 用条形图绘制直方图

函数bar(horz, v, width),其中,v是一个行(列)向量,它包含将被绘制的点;horz是一个与v有相同维数的向量,它包含水平标度值的增量;

width是一个在0到1之间的数,表示竖条宽度,width值为1时,竖条较明显;当width的值为0时,竖条是简单的垂直线;width的默认值是0.8。

在绘制条形图时,我们通常会将水平轴等分为几段,以便降低水平轴的分辨率。

下面的语句将生成一副条形图,其水平轴以10个灰度级为一组:

>>h = imhist(f)

>>h1 = h(1:10:256)

>>horz = 1:10:256

>>bar(horz, h1)

>>axis([0 255 0 15000])

%axis函数设置了水平轴和垂直轴的最大和最小值,语法为:

%axis([horzmin horzmax vertmin vertmax])

>>set(gca, ‘xtick’, 0:50:255)

>>set(gca, ‘ytick’, 0:2000:15000)

%参数gca表示“获得当前轴”(即最终显示的图形的轴),%参数xtick和ytick按所示的间隔设置水平轴和的垂直轴的刻度。

%这两个语句中,坐标轴的取值范围和刻度线都是人工设定的。使用函数%xlim(‘auto’)ylim(‘auto’)可以自动设定坐标轴的取值范围和刻度线。

  1. 用杆状图绘制直方图

函数stem(horz, v, ‘color_linestyle_marker’, ‘fill’),参量color_linestyle_marker来自下表的三个值:颜色_线形_标记

例如,stem(v, ‘r--s’)生成一副杆状图,其线条与标记点都为红色,线条为虚线,标记点为方形。

若使用fill,且标记点为圆形、方形、菱形,则标记点的颜色会是color指定的颜色。

默认颜色是black黑色,默认线条为solid实线,默认标记点的形状是circle圆形。

>>h = imhist(f)

>>h1 = h(1:10:256)

>>horz = 1:10:256

>>stem(horz, h1, ‘fill’)

>>axis([0 255 0 15000])

>>set(gca, ‘xtick’, 0:50:255)

>>set(gca, ‘ytick’, 0:2000:15000)

  1. 用曲线图绘制直方图

函数plot(X, Y, ‘color_linestyle_marker’)绘制以X、Y元素为横、纵坐标的曲线。plot(X, ‘color_linestyle_marker’)绘制以向量元素X的下标为横坐标、元素值为纵坐标的连续曲线。plot的默认值为黑色无标记实线。

>>h = imhist(f)

>>plot(h) %使用默认值

>>axis([0 255 0 15000])

>>set(gca, ‘xtick’, 0:50:255)

>>set(gca, ‘ytick’, 0:2000:15000)

用以上四种方法绘制直方图得到的结果:

实验报告

7. 对图像breast.bmp进行直方图绘制,要求分别用上述4个绘图函数,写出各自的MATLAB程序。

8)直方图均衡

直方图均衡化由函数histeq实现,语法为:

g = histeq(f, nlev)

式中f是输入图像,nlev是为输出图像指定的灰度级,其默认值为64,我们要将nlev赋值为灰度级的最大可能数(通常为256)。

>>imshow(f)

>>figure, imhist(f)

>>ylim(‘auto’)

>>g = histeq(f, 256) %进行直方图均衡化处理图像

>>figure, imshow(g)

>>figure, imhist(g) %显示出图像g的直方图

>>ylim(‘auto’)

matlab中的ylim([4 78]:y轴上下限设定范围[4,78];

x轴上下限设定xlim([a,b]);

y轴上下限设定ylim([a,b])

   注意:[a,b] a、分别代表坐标范围;

实验报告

8. 对图像pollen.bmp和lena.bmp进行图像增强——直方图均衡,对比增强前后的图像,并给出增强前后的直方图,写出MATLAB程序。

学习参考链接:

http://t.csdn.cn/k3GC8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值