【数字图像】实验二.图像间的运算和直接灰度变换(综合性)

一、实验目的

1.了解和掌握图像增强的方法。

2.掌握MATLAB中的图像的代数和几何运算函数的使用方法。

3.掌握MATLAB中的图像的增强函数的使用方法。

4.掌握MATLAB中的图像的滤波函数的使用方法。

5.用MATLAB函数和编程实现图像的几何变换、灰度变换和直方图变换,分析和比较不同系数、不同函数情况下的图像增强效果。

二、实验要求

1.实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。

2.实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。

3.实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码,实验小结,回答问题。

三、实验内容(每一个内容编写一个*.m文件)

1.将索引图像‘woman.mat’调整大小。

(1)增大3倍;

(2)减少1/2;

(3) 调整大小为〔20 80〕。

要求分别用3种不同的插补方法。

代码:

clc,
clear
load woman.mat;
figure;
imshow(X,map);
figure;
X1 = imresize(X,3,'bilinear'); 
imshow(X1,map)
title('双线性插补法')
figure;
X2 = imresize(X,0.5,'nearest');
imshow(X2,map)
title('最近邻法插补')
figure;
X3 = imresize(X,[20,80],'bicubic');
imshow(X3,map)
title('双立方插补')

2. 将索引图像‘woman.mat’进行旋转。

(1)顺时针旋转30°;

(2)逆时针旋转60°;

(3)逆时针旋转90°;

(4)用参数‘crop’逆时针旋转60°。

要求分别用3种不同的插补方法。

代码:

clc,

clear

load woman.mat;

subplot(2,3,1)

imshow(X,map);

title("原图像")

subplot(2,3,2)

I = imrotate(X,-30,'bilinear');

imshow(I,map);

title("顺时针旋转30°");

subplot(2,3,3)

I1 = imrotate(X,60,'bicubic');

imshow(I1,map);

title("逆时针旋转60°")

subplot(2,3,4)

I2 = imrotate(X,90,'nearest');

imshow(I2,map);

title("逆时针旋转90°")

subplot(2,3,5)

I3 = imrotate(X,60,'crop');

imshow(I3,map);

title("用参数‘crop’逆时针旋转60°")

3.将索引图像chess.mat进行剪切 。

(1)交互式剪切,剪切象棋马头部分;

(2)非交互式剪切,剪切范围为[30 60 40 100]。

代码:

clc,
clear
load chess.mat
figure;
imshow(X,map);
title('原图像')
imcrop;
figure;
X2 = imcrop(X,map,[30 60 40 100]);
imshow(X2,map);
title('原图剪切块(30 60 40 100)')

 

4.利用Maltlab直接灰度变换法的函数对图像medicine_pic.jpg进行灰度变换:

(1)使用函数imadjust(参数gamma分别取0.4,1和2时)在一个figure图像窗口中显示输入图像(medicine_pic.jpg);体会gammar参数取不同值时的使用效果并用文字说明;

(2)使用函数imadjust得到输入图像(medicine_pic.jpg)的负片图像。

代码:

clc,

clear

I = imread("medicine_pic.jpg");

subplot(2,2,1);

imshow(I)

subplot(2,2,2);

I1 = imadjust(I,[],[],0.4);

imshow(I1)

subplot(2,2,3);

I2 = imadjust(I,[],[],1);

imshow(I2)

subplot(2,2,4);

I3 = imadjust(I,[],[],2);

imshow(I3)

g0 = imadjust(I,[0,1],[1,0],1);

figure,imshow(g0);title('负片图像');

g = imcomplement(I);

figure,imshow(g);title('等效的负片图像');

5.根据灰度变换原理编写MATLAB代码,对图像实现如下灰度变换:

(1)对输入图像(pollen.jpg)实现线性变换,pollen = pollen×A+B,其中,及,观察两种情况下图像灰度变换并分析,选择一个合适的变换参数,使得图像质量得到提高,并分析原因;

(2)对输入图像(point.jpg)进行对数变换,point = log(1 + point),并分析变换前后图像的变化和数据的变化;

(3)对输入图像(point.jpg)进行幂指数变换,point = point ^0.2,并分析变换前后图像的变化和数据的变化。

代码:

clear

figure(1)

I = imread('pollen.jpg');

subplot(2,3,1),imshow(I),title('原图1')



imgI = double(I);

imgI1 =(imgI * 0.5 + 50)/255;

subplot(2,3,4),imshow(imgI1),title('A = 0.5,B = 50')

imgI2 =(imgI * 1.5 + 50)/255;

subplot(2,3,5),imshow(imgI2),title('A = 1.5,B = 50')

imgI3 =(imgI * 2 + 20)/255;

subplot(2,3,6),imshow(imgI3),title('A = 2,B = 20')



figure(2)

J = imread('point.jpg');

subplot(3,2,1),imshow(J),title('原图2')

imgJ = double(J);

K1= log(1 +imgJ);

K2=mat2gray(log(1 +imgJ));

subplot(3,2,3),imshow(K1);title('对数运算')

subplot(3,2,4),imshow(K2);title('对数运算后归一化')

L1=imgJ.^2;

L2=mat2gray(imgJ.^0.2);

subplot(3,2,5),imshow(L1);title('幂次运算')

subplot(3,2,6),imshow(L2);title('幂次运算后归一化')

6. 计算并绘制图像(pollen.jpg)直方图,显示结果图上方加标题,体会不同方法的显示效果(横坐标范围0-255步长50,纵坐标范围0-300000步长30000):

(1)使用函数imhist绘制图像直方图(参数选择:25);

(2)使用函数bar绘制图像直方图(参数选择:horz=linspace(0,255,25));

(3)使用函数stem绘制图像直方图(参数选择:horz=linspace(0,255,25);’fill’);

(4)使用函数plot绘制图像直方图(参数选择:default);

代码:

clear

clc

I = imread("pollen.jpg");

figure;

imshow(I);

figure;

imhist(I,25);

axis([0 255 0 300000])

set(gca,'xtick',0:30:255)

set(gca,'ytick',0:50000:300000)

title('使用函数imhist绘制图像直方图')

figure;

h = imhist(I,25);

horz=linspace(0,255,25);

bar(horz,h,0.3);

axis([0 255 0 300000])

set(gca,'xtick',0:20:255)

set(gca,'ytick',0:40000:300000)

title('使用函数bar绘制图像直方图')

figure;

stem(horz,h,'fill')

axis([0 255 0 300000])

set(gca,'xtick',0:30:255)

title('使用函数stem绘制图像直方图')

figure;

plot(h);

title('使用函数plot绘制图像直方图')

7.利用Maltlab中的图像增强函数,对一给定灰度图像‘cameraman.tif’进行增强处理,要求依次进行以下操作:添加椒盐噪声、中值滤波、图像增亮、增加对比度、直方图均衡化 ,得到增强后的图像,要求每次处理后显示图像的直方图,并分析比较直方图。

代码:

clc,

clear

I = imread('cameraman.tif');

subplot(3,3,1);

J1 = imnoise(I,'salt & pepper');

imshow(J1);

title("椒盐噪声")

subplot(3,3,2);

imhist(J1);

subplot(3,3,3);

J2 = medfilt2(J1);

imshow(J2);

title("添加中值滤波")

subplot(3,3,4);

imhist(J2);

subplot(3,3,5)

J3 = imadjust(I,[],[0.5 1]);

imshow(J3);

title("灰度变换")

subplot(3,3,6)

imhist(J3);

subplot(3,3,7)

J4 = imadjust(J3,[0.35 0.55],[]);

imshow(J4);

title("图像增亮")

subplot(3,3,8)

imhist(J4);

subplot(3,3,9)

J5 = histeq(J4);

imshow(J5);

title("直方图均衡化")

8.利用Maltlab中的图像增强函数,对一给定灰度图像‘eight.tif’进行局部增强处理,要求依次进行以下操作:灰度求反、图像变暗、降低对比度,得到增强图像1,对增强图像1选择明暗交界处的一部分进行滤波,得到局部增强图像2。

代码:

clear;
I=imread('eight.tif');
figure,
subplot(2,2,1);
imshow(I)
subplot(2,2,2);
J1=imadjust(I,[0 1],[1 0]); 
imshow(J1)
title(" 灰度反转")
subplot(2,2,3);
J2=imadjust(J1,[],[0 0.8]); 
imshow(J2)
title(" 图像变暗")
subplot(2,2,4);
J3=imadjust(J2,[],[0.3 0.7]);
imshow(J3)
title("降低对比度")
figure,
J4=roipoly(J3); 
subplot(1,2,1);
imshow(J4)
J5=fspecial('average',9); 
J6=roifilt2(J5,J3,J4); 
subplot(1,2,2);
imshow(J6)

9.根据直方图均衡原理编写MATLAB代码,对图像pollen.jpg实现直方图均衡化处理,与直接使用函数histeq()的结果进行比较并做出文字说明。

a= imread('pollen.jpg');
I=a;
[height,width] = size(I);
figure
subplot(3,2,1)
imshow(I)%显示原图像
subplot(3,2,2)
imhist(I)%显示原图像直方图
%进行像素灰度统计;
n = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
    for j = 1: width
        n(I(i,j) + 1) = n(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
    end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
    p(i) = n(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
for i = 1:256
    if i == 1
        c(i) = p(i);
    else
        c(i) = c(i - 1) + p(i);
    end
end
%累计分布取整
c = uint8(255 .* c + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
    for j = 1: width
        I(i,j) = c(I(i,j));
    end
end
subplot(3,2,3)
imshow(I)%显示直方图均衡化图像
subplot(3,2,4)
imhist(I)%显示直方图均衡化图像直方图
b=histeq(a);%调用直方图均衡化histeq()函数%进行比较
subplot(3,2,5)
subimage(b);
subplot(3,2,6)
imhist(b);

四、问题与讨论

1.图像灰度变换有哪些类型?

负片
扩展区间与伽马灰度变换
自动选取灰度级的灰度变换
对数变换
直方图均衡化

  1. 直方图是什么概念?它反映了图像的什么信息?

在 MATLAB 中,直方图是指对图像中像素值的统计分布。它以图像的像素值为横轴,像素值在图像中的出现次数(或频率)为纵轴,用柱状图的形式表示。直方图可以帮助我们了解图像的亮度分布、对比度、颜色分布等信息。

直方图反映了图像的以下信息:

亮度分布:直方图的形状可以展示图像中亮度的分布情况。例如,如果直方图的峰值集中在较高的亮度值上,表示图像整体较亮;如果峰值集中在较低的亮度值上,表示图像整体较暗。

对比度:直方图的宽度可以反映图像的对比度。对比度较高的图像,直方图会在较宽的范围内分布,而对比度较低的图像,直方图会更加集中在一个较小的范围内。

颜色分布:对于彩色图像,可以分别计算每个颜色通道的直方图,从而了解图像的颜色分布情况。例如,红色通道的直方图可以显示图像中红色的分布情况,绿色通道的直方图可以显示图像中绿色的分布情况,蓝色通道的直方图可以显示图像中蓝色的分布情况。

通过分析直方图,我们可以获取关于图像亮度、对比度和颜色分布等方面的信息,从而帮助我们进行图像处理和分析。

  1. 直方图均衡化是什么意思?它的主要用途是什么?均衡化后的图像有什么特点? 

直方图均衡化是一种图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像像素的灰度级,以获得更均匀的直方图分布。均衡化后的图像具有增强的对比度和更广泛的亮度范围,使得图像细节更加清晰可见。

直方图均衡化的主要用途包括:

1. 图像增强:通过增加图像的对比度,使得图像细节更加突出。

2. 图像处理:在一些图像处理任务中,如目标检测、图像分割和特征提取等,直方图均衡化可以提高算法的性能。

3. 视觉效果:直方图均衡化可以用于改善图像的视觉效果,例如在图像展示、摄影和电影制作中。

均衡化后的图像具有以下特点:

1. 对比度增强:均衡化后的图像具有更大的动态范围,使得图像中的细节更加明显。

2. 原始直方图被拉伸:均衡化会拉伸原始图像的直方图,使得它分布更加均匀。

3. 全局性质:直方图均衡化是一种全局操作,它不考虑图像中的局部特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值