实验2 图像的灰度变换

更新时间:2024-04-10 21:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验2 图像的灰度变换

一、实验目的:

学会用MATLAB软件对图像进行运算和灰度变换。

二、实验内容:

用+、-、*、/、imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply、imsubtract和imadjust等函数生成各类灰度变换图像。

三、实验相关知识

1、代数运算

两幅图像之间进行点对点的加、减、乘、除运算后得到输出图像。我们可以分别使用MATLAB的基本算术符+、-、*、/来执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型(命令函数为double())。为了更方便对图像进行操作,图像处理工具箱中也包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。如下所示:

imabsdiff:计算两幅图像的绝对差值 imadd:两个图像的加法 imcomplement:一个图像的补 imdivide:两个图像的除法

imlincomb:计算两幅图像的线性组合 immultiply:两个图像的乘法 imsubtract:两个图像的减法

使用图像处理工具箱中的图像代数运算函数无需再进行数据类型间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。 代数运算的结果很容易超出数据类型允许的范围。图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。

2、灰度变换

点运算也称为灰度变换,是一种通过对图像中的每个像素值进行运算,从而改善图像显示效果的操作。

对于特定变换函数f的灰度变换,用户可以利用MATLAB强大的矩阵运算能力,对图像数据矩阵调用各种MATLAB计算函数进行处理。需要注意的是由于MATLAB不支持uint8类型数据的矩阵运算,所以首先要将图像数据转换为双精度类型,计算完成后再将其转换为uint8类型(命令为uint8( ))。

而在MATLAB图像处理工具箱中也提供了一个灰度变换函数imadjust,其语法格式为:J=imadjust(I, [low_in high_in], [low_out high_out], gamma)。[low_in high_in]是原图像中要变换的灰度范围,[low_out high_out]是指定变换后的灰度范围,两者的默认值均为[0 1]。gamma的取值决定了输入图像到输出图像的灰度映射方式,即决定是增强低灰度还是增强高灰度。gamma大于1、等于1和小于1的映射方式如下图所示。

四、实验步骤:

1、仔细阅读imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply

和imsubtract的帮助文件(help imabsdiff),并练习相关函数的使用。 2、

加法运算:将rice.tif和cameraman.tif相加并显示相加结果。若图像每个像素加上一个常数则亮度会增加,将rice.tif每个像素加上100,显示出结果图像。(a.tif 为左边的图像,b.tif为右边的图像)

f=imread('D:\\xff\\a.tif'); g=imread('D:\\xff\\b.tif'); [n1,k1,L1]=size(f); [n2,k2,L2]=size(g); j1=min(n1,n2); j2=min(k1,k2);

i1=f(1:j1,1:j2,:); i2=g(1:j1,1:j2,:); h=imadd(i1,i2); figure imshow(h,254)

将rice.tif每个像素加上100 f=imread('D:\\xff\\a.tif'); h=imadd(f,100); imshow(h,254)

3、减法运算:将上一步中亮度增加的rice图像减去原rice.tif图像,显示出结果,并想想为什么会有这样的结果。

f=imread('D:\\xff\\a.tif'); h=imadd(f,100);

g=imsubtract(f,h); imshow(h,254)

4、乘、除法运算:一个图像乘以一个大于1的数会使图像变亮,乘以一个

小于1的数会使图像变暗,使用immultiply对图像进行乘法运算,乘以一个常数或是乘以另一个图像。两幅图像的除法操作可以给出相应像素值的变化比率,使用imdivide函数进行两幅图像的除法。 两图像相乘图像如下:

f=imread('D:\\xff\\a.tif'); g=imread('D:\\xff\\b.tif'); [n1,k1,L1]=size(f); [n2,k2,L2]=size(g); j1=min(n1,n2); j2=min(k1,k2); i1=f(1:j1,1:j2,:); i2=g(1:j1,1:j2,:); h= immultiply(i1,i2); figure imshow(h,254)

两图像相除:

f=imread('D:\\xff\\a.tif'); g=imread('D:\\xff\\b.tif'); [n1,k1,L1]=size(f); [n2,k2,L2]=size(g); j1=min(n1,n2); j2=min(k1,k2); i1=f(1:j1,1:j2,:); i2=g(1:j1,1:j2,:); h= imdivide(i1,i2); figure imshow(h,254)

5、实现下图(a)和(b)所示的灰度变换(图中t1、t2、s1、s2自己设置合适的

数值)。

close all; t1=30; t2=10; s1=30; s2=128; subplot(1,2,1)

a=imread('D:\\xff\\a.tif'); a=rgb2gray(a); [m,n]=size(a);

whos f; %显示一个数组的附加信息 imshow(a); title('图像a')

subplot(1,2,2) for i=1:m for j=1:n f=a(i,j); g(i,j)=0;

if(f>=0)&&(f<=s1); g(i,j)=t1;

elseif(f>=s1)&&(f<=s2) g(i,j)=t2;

elseif(f>=s2)&&(f<=255) g(i,j)=t1; end end end

imshow(mat2gray(g)); title('矩形灰度变换后的图')

图像a矩形灰度变换后的图

6、阅读imadjust的帮助文件,使用函数imadjust进行灰度变换。设置不同的[low_in high_in]、[low_out high_out]和gamma值,实现多种灰度变换。

close all; t1=30; t2=60; s1=30; s2=128;

subplot(1,2,1)

a=imread('D:\\xff\\a.tif'); %从D盘123文件夹中读图 a=rgb2gray(a); [m,n]=size(a);

whos a; %显示出一个数组的附加信息 imshow(a); %显示图像 title('图像a')

r1=(t1)/(s1);b1=0; %定义灰度变换斜率和截距,下同 r2=(t2-t1)/(s2-s1);b2=t1-r2*s1; r3=(255-t2)/(255-s2);b3=t2-r3*s2; subplot(1,2,2) for i=1:m for j=1:n f=a(i,j); g(i,j)=0;

if(f>=0)&&(f<=s1); g(i,j)=r1*f+b1; elseif(f>=s1)&&(f<=s2)

g(i,j)=r2*f+b2;

elseif(f>=s2)&&(f<=255) g(i,j)=r3*f+b3; end end end

imshow(mat2gray(g));

title('锯齿波形灰度变换后的图')

图像a锯齿波形灰度变换后的图

五、实验总结

通过实验,我学会用MATLAB软件对图像进行运算和灰度变换。并学会用+、-、*、/、imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply、imsubtract和imadjust等函数生成各类灰度变换图像。

本文来源:https://www.bwwdw.com/article/pwur.html

Top