【实验二 图像间的运算和直接灰度变换】

一、实验目的

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
subplot(3,2,1)
subimage(X,map);
title('原始图象')
X1=imresize(X,3);
subplot(3,2,2)
subimage(im2double(X1),map);
title('最近邻法插补,大小调整为 原图的3倍')
X2=imresize(X,3,'bilinear');
subplot(3,2,3)
subimage(im2double(X2),map);subimage(im2double(X),map);
title('双线性插补,大小调整为 原图的3倍')
X3=imresize(X,3,'bicubic');
subplot(3,2,4)
subimage(im2double(X3),map);
title('双立方插补,大小调整为 原图的3倍')
X4=imresize(X,0.5);
subplot(3,2,5)
subimage(im2double(X4),map);
title('最近邻法插补,大小调整为 原图的0.5倍')
  1. 将索引图像‘woman.mat’进行旋转。
    (1)顺时针旋转30°;
    (2)逆时针旋转60°;
    (3)逆时针旋转90°;
    (4)用参数‘crop’逆时针旋转60°。
    要求分别用3种不同的插补方法。
clc
clear
load woman.mat;
subplot(3,3,1);
subimage(X,map);

X11=imrotate(X,-30,'nearest');
subplot(3,3,4);
subimage(im2double(X11),map);
X12=imrotate(X,-30,'bilinear');
subplot(3,3,5);
subimage(im2double(X12),map);
X13=imrotate(X,-30,'bicubic');
subplot(3,3,6);
subimage(im2double(X13),map);

X21=imrotate(X,60,'nearest');
subplot(3,3,7);
subimage(im2double(X21),map);
X22=imrotate(X,60,'nearest','crop');
subplot(3,3,8);
subimage(im2double(X22),map);

X3=imrotate(X,90,'nearest');
subplot(3,3,9);
subimage(im2double(X3),map);

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

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

clc
clear
load chess.mat;
subimage(X,map);
imcrop

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

clear
load chess.mat;
subplot(1,2,1);
subimage(X,map);
title('原图象')
imcrop;
X1=imcrop(X,map,[30 60 40 100]);
subplot(1,2,2);
subimage(X1,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,3,1),imshow(I),title('原始图')
k1 = imadjust(I,[],[],0.4);
subplot(2,3,4),imshow(k1),title('gamma=0.4')
k2 = imadjust(I,[],[],1);
subplot(2,3,5),imshow(k2),title('gamma=1')
k3 = imadjust(I,[],[],2);
subplot(2,3,6),imshow(k3),title('gamma=2')
subplot(2,3,2),imshow(I),title('原始图')
g1 = imadjust(I,[0 1],[1 0]);
subplot(2,3,2),imshow(g1),title('负片')

5.根据灰度变换原理编写MATLAB代码,对图像实现如下灰度变换:
(1)对输入图像(pollen.jpg)实现线性变换,pollen = pollen×A+B,其中,及,观察两种情况下图像灰度变换并分析,选择一个合适的变换参数,使得图像质量得到提高,并分析原因;
(2)对输入图像(point.jpg)进行对数变换,point = log(1 + point),并分析变换前后图像的变化和数据的变化;
(3)对输入图像(point.jpg)进行幂指数变换,point = point ^0.2,并分析变换前后图像的变化和数据的变化。

%sy25
clc
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));  %mat2gray()归一化了
subplot(3,2,3),imshow(K1);title('对数运算')
subplot(3,2,4),imshow(K2);title('对数运算后归一化')
%幂次运算;
L1=imgJ.^2;
L2=mat2gray(imgJ.^0.2); %mat2gray()归一化了
subplot(3,2,5),imshow(L1);title('幂次运算') 
subplot(3,2,6),imshow(L2);title('幂次运算后归一化') 
  1. 计算并绘制图像(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);
%%% sy28
clear all
close all
clc
figure(1)
f=imread('pollen.jpg');
imshow(f),title('原图')
figure(2)
subplot(2,2,1)
imhist(f,25)
axis([0 255 0 300000])  %%设置坐标轴
set(gca,'xtick',0:30:255)
set(gca,'ytick',0:50000:300000)
title('imhist')
h=imhist(f,25)  %0-255,取其中25个灰度级
subplot(2,2,2)
horz=linspace(0,255,25);%0-255,均分25个元素
bar(horz,h,0.3)  %横轴horz,纵轴h
axis([0 255 0 300000])  %%设置坐标轴
set(gca,'xtick',0:20:255)
set(gca,'ytick',0:40000:300000)
title('bar')
subplot(2,2,3)
stem(horz,h,'fill')
axis([0 255 0 300000])  %%设置坐标轴
set(gca,'xtick',0:30:255)
set(gca,'ytick',0:50000:300000)
title('stem')
subplot(2,2,4)
plot(horz,h)
axis([0 255 0 300000])  %%设置坐标轴
set(gca,'xtick',0:40:255)
set(gca,'ytick',0:60000:300000)

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

clc
clear all
close all
figure
I=imread('cameraman.tif');
subplot(3,4,1)
subimage(I);
subplot(3,4,2)
imhist(I);
%Add salt & pepper Noise
K1=imnoise(I,'salt & pepper',0.02);
subplot(3,4,3)
subimage(K1);
%Median Filter
K2=medfilt2(K1,[5 5]);
subplot(3,4,4)
subimage(K2);
%Brighten
K3=imadjust(I,[],[0.3 1]);
subplot(3,4,5)
subimage(K3);
subplot(3,4,6)
imhist(K3);
%Increase Contrast
K4=imadjust(K3,[0.25 0.75],[]);
subplot(3,4,7)
subimage(K4);
subplot(3,4,8)
imhist(K4);
%Histogram Equlization
K5=histeq(K4);
subplot(3,4,9)
subimage(K5);
subplot(3,4,10)
imhist(K5);

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

%sy27
clc
clear all
close all
figure(1)
I=imread('eight.tif');
subplot(4,2,1)
subimage(I);
subplot(4,2,2)
imhist(I);
%fan
J1=imadjust(I,[],[1 0]);
subplot(4,2,3)
subimage(J1);
subplot(4,2,4)
imhist(J1);
%Darken
J2=imadjust(J1,[],[0 0.75]);
subplot(4,2,5)
subimage(J2);
subplot(4,2,6)
imhist(J2);

%Decrease Contrast
J3=imadjust(J2,[],[0.25 0.75]);
subplot(4,2,7)
subimage(J3);
subplot(4,2,8)
imhist(J3);

figure(2)
BW = roipoly(J3);
figure(3)
subplot(1,3,1)
subimage(J3);
subplot(1,3,2);
subimage(BW);

h1 = fspecial('average',9);
J4 = roifilt2(h1,J3,BW);
subplot(1,3,3);
subimage(J4);

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

% sy29直方图均衡化
clc
clear all
close all
fx= imread('pollen.jpg');
I=fx;
[height,width] = size(I);
figure
subplot(321)
imshow(I)%显示原始图像
subplot(322)
imhist(I)%显示原始图像直方图
 
%进行像素灰度统计;
NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
    for j = 1: width
        NumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
    end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
    ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256
    if i == 1
        CumuPixel(i) = ProbPixel(i);
    else
        CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
    end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
    for j = 1: width
        I(i,j) = CumuPixel(I(i,j));
    end
end
 
subplot(323)
imshow(I)%显示直方图均衡化图像
subplot(324)
imhist(I)%显示直方图均衡化图像直方图

K=histeq(fx);%调用直方图均衡化histeq()函数%进行比较
subplot(325)
subimage(K);
subplot(326)
imhist(K);

四、问题与讨论

1.图像灰度变换有哪些类型?
图像灰度变换包括线性变换、非线性变换和直方图操作等类型。其中,线性变换包括对比度拉伸和对比度压缩等;非线性变换包括伽玛变换等;直方图操作包括直方图均衡化和直方图匹配等。

2.直方图是什么概念?它反映了图像的什么信息?
直方图是指对图像中每个像素灰度值的统计直方图。它反映了图像中每个灰度级别出现的频率或数量,可以用来评估图像的对比度、亮度等特征。

3.直方图均衡化是什么意思?它的主要用途是什么?均衡化后的图像有什么特点?
直方图均衡化是一种常见的图像增强技术,其主要目的是通过重新分配图像像素的灰度级别来增强图像的对比度和亮度等特征。它的主要用途是改善图像质量,使得图像更易于观察和处理。均衡化后的图像具有更好的视觉效果,细节更加清晰,但也可能会导致一些局部细节损失。

五、实验材料

1.实验软件

MATLAB R2020b,其他版本都可以

2.注意事项

实验中需要用到的图片要先准备好放到项目中去

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值