重庆理工大学图像处理实验二:图像增强
实验2:图像增强
一 实验目的和要求
理解图像灰度映射的原理。
掌握MATLAB编程实现图像灰度映射的方法
理解直方图均衡的原理
掌握MATLAB中用直方图均衡改善图像的方法
理解空间滤波的种类和方法
掌握使用MATLAB中的空间滤波增强图像的方法
了解傅里叶变换及频域滤波原理
掌握使用MATLAB中的频域滤波增强图像的方法
二 实验环境
操作系统环境:windows 10
开发工具:MATLAB R2018b
其它辅助工具:百度、谷歌搜索引擎
三 实验内容
1. 考虑使用图1所示的门形灰度映射函数,其作用是可将某个灰度值范围(这里为s1到s2间)变得比较突出(较高的灰度值t2),而将其余灰度值变为某个低灰度值(t1)。
图1门形灰度映射函数
(1)用门形灰度映射函数对给定输入图像进行增强。如果同时增加s1和s2的值,或同时减小s1和s2的值,指出两种情况下输出图像都会发生什么样的变化。
(2)用门形灰度映射函数对给定输入图像进行增强。如果增加s1而减小s2的值,或减小s1而增加s2的值,指出两种情况下输出图像都会发生什么样的变化。
(1)分析及设计思路
设置初始s1和s2的值,通过循环判断的到增强的灰色图像,如图2所示。然后根据题目而修改s1或者s2的大小,最后得到结果。
图2 增强后的灰度图像
(2)解答及源码
第一问(1)同时增加s1、s2 图像比前面增强的图像变白,同时减小s1、s2 图像比前面增强的图像变黑。
第二问(2)增加s1减小s2 图像整体变黑【比(1)的黑更黑】,减小s1增加s2 图像整体变白【比(1)的白更白】。
本程序的源码如下所示:
clc; clear; close all; %% (1) % 读取图像 % 因为我的matlaim = imread('lena.jpg'); % 灰度化处理 im1 = rgb2gray(im); % 显示原图 figure; subplot(221); imshow(im1); title('原始灰度图像'); % 设定参数 t1 = 20; t2 = 128; % 图像尺寸 [N,M] = size(im1); % 灰度阈值 s1 = 70; s2 = 150; % 增强图像 im2 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im2(i,j) = t1; else im2(i,j) = t2; end end end subplot(222); imshow(im2); title('增强的灰度图像'); %% s1 s2 同时增大 % 灰度阈值 s1 = 70+50; s2 = 150+50; % im3 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im3(i,j) = t1; else im3(i,j) = t2; end end end subplot(223); imshow(im3); title('s1s2同时增加后增强的灰度图像'); %% s1 s2 同时增大 % 灰度阈值 s1 = 70-50; s2 = 150-50; % 增强图像 im4 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im4(i,j) = t1; else im4(i,j) = t2; end end end subplot(224); imshow(im4); title('s1s2同时减小后增强的灰度图像'); %% 同时增加s1s2 图像比前面增强的图像变白 %% 同时减小s1s2 图像比前面增强的图像变黑 %% (2) % 显示原图 figure; subplot(221); imshow(im1); title('原始灰度图像'); subplot(222); imshow(im2); title('增强的灰度图像'); %% 增加s1 减小s2 % 灰度阈值 s1 = 70+30; s2 = 150-30; % im5 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im5(i,j) = t1; else im5(i,j) = t2; end end end subplot(223); imshow(im5); title('s1增加s2减小后增强的灰度图像'); %% 减小s1 增加s2 % 灰度阈值 s1 = 70-30; s2 = 150+30; % im6 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im6(i,j) = t1; else im6(i,j) = t2; end end end subplot(224); imshow(im6); title('s1减小s2增加后增强的灰度图像'); %% 增加s1减小s2 图像整体变黑【比(1)的黑更黑】 %% 减小s1增加s2 图像整体变白【比(1)的白更白】
(3)实验结果及分析
实验结果如图3、4所示:
图3 第1问实验结果
图4第2问实验结果
2. 设有一幅图像有如图5所示直方图,请用手工方法列表计算该直方图的均衡化直方图。
图5 直方图
(1)分析及设计思路
根据课本例2.4.2学习其计算方法,然后逐步计算本题,最终的出结果。
(2)解答及源码
计算步骤如下表1所示。
表1 均衡化直方图步骤
序号 运算 步骤和结果
1 原始图像灰度级 0 1 2 3 4 5 6 7
2 原始直方图sk 0.17 0.09 0.09 0.08 0.07 0.06 0.06 0.38
3 计算累计直方图各项tk 0.17 0.26 0.35 0.43 0.5 0.55 0.62 1
4 取整扩展:
tk=int[(L-1)tk+0.5]
L:灰度级个数 1 2 2 3 3 4 4 7
5 确定映射对应关系
(sk→tk) 0→1 1 , 2→2 3 , 4→3 5 , 6→4 7→7
6 根据映射关系计算
均衡化直方图 0.174 0.174 0.148 0.12 0.384
(3)实验结果及分析
本次实验题目2的结果如图6所示。
图6 第2题实验结果
- 收集10幅灰度图像,包括过亮、过暗、对比度暗淡等图像,使用MATLAB的直方图均衡方法对其进行直方图均衡。依次显示原图、原图直方图、均衡后的图像及其直方图,尝试总结一下直方图均衡方法对什么样的图像改善效果较好。
(1)分析及设计思路
使用matlab显示图像灰色直方图函数imhist和直方图均衡函数histeq对图像进行处理,从而得到实验结果。
(2)解答及源码
此程序的源码如下:
clc; clear; close all; %% (1) % 读取图像 % 因为我的matlaim = imread('lena.jpg'); % 灰度化处理 im1 = rgb2gray(im); % 显示原图 figure; subplot(221); imshow(im1); title('原始灰度图像'); % 设定参数 t1 = 20; t2 = 128; % 图像尺寸 [N,M] = size(im1); % 灰度阈值 s1 = 70; s2 = 150; % 增强图像 im2 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im2(i,j) = t1; else im2(i,j) = t2; end end end subplot(222); imshow(im2); title('增强的灰度图像'); %% s1 s2 同时增大 % 灰度阈值 s1 = 70+50; s2 = 150+50; % im3 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im3(i,j) = t1; else im3(i,j) = t2; end end end subplot(223); imshow(im3); title('s1s2同时增加后增强的灰度图像'); %% s1 s2 同时增大 % 灰度阈值 s1 = 70-50; s2 = 150-50; % 增强图像 im4 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im4(i,j) = t1; else im4(i,j) = t2; end end end subplot(224); imshow(im4); title('s1s2同时减小后增强的灰度图像'); %% 同时增加s1s2 图像比前面增强的图像变白 %% 同时减小s1s2 图像比前面增强的图像变黑 %% (2) % 显示原图 figure; subplot(221); imshow(im1); title('原始灰度图像'); subplot(222); imshow(im2); title('增强的灰度图像'); %% 增加s1 减小s2 % 灰度阈值 s1 = 70+30; s2 = 150-30; % im5 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im5(i,j) = t1; else im5(i,j) = t2; end end end subplot(223); imshow(im5); title('s1增加s2减小后增强的灰度图像'); %% 减小s1 增加s2 % 灰度阈值 s1 = 70-30; s2 = 150+30; % im6 = uint8(zeros(N,M)); % 循环判断 for i = 1:N for j = 1:M if im1(i,j) < s1 || im1(i,j) > s2 im6(i,j) = t1; else im6(i,j) = t2; end end end subplot(224); imshow(im6); title('s1减小s2增加后增强的灰度图像'); %% 增加s1减小s2 图像整体变黑【比(1)的黑更黑】 %% 减小s1增加s2 图像整体变白【比(1)的白更白】
(3)实验结果及分析
实验2题目3的结果如图7、8、9所示。
图7 实验结果
图8 实验结果
图9 第3题运行结果
4. 编程先将一幅灰度图像用3×3平均滤波器平滑一次,再进行如下图10所示增强:
g(x,y)={■(G[f(x,y)]@f(x,y))┤ ■(@)■(G[f(x,y)]≥T@其它)
图10 题4图
其中,G[f(x, y)]是f(x,y)在(x, y)处的梯度;T是非负阈值。
(1)比较原始图像和增强图像,看哪些地方得到了增强;
(2)改变阈值T的数值,看对增强效果有哪些影响。
(1)分析及设计思路
第一步先将灰度图像使用im2double函数转为[0,1]浮点数,然后通过平均滤波平滑,采用的sobel模板如下图11所示,最后通过给定公式进行图像增强。
图11 Sobel算子
(2)解答及源码
第一问(1)比较原图像和增强图像可得在边缘处得到了增强,因为边缘处梯度大。
第二问(2)改变阀值T后,发现阈值越大,边缘被增强的效果越差。
此程序的源码如下:
clc; clear; close all; %% (1) % 读取图像 im = imread('lena.jpg'); % 灰度化处理 im1 = rgb2gray(im); % 显示原图 figure; subplot(221); imshow(im1); title('原始灰度图像'); % 图像尺寸 [N,M] = size(im1); % 转成[0,1]浮点数 im1 = im2double(im1); % 滤波图像 im2 = im1; % 循环 平均滤波 for i = 2:N-1 for j = 2:M-1 im2(i,j) = sum(sum(im1(i-1:i+1,j-1:j+1)))/9; end end subplot(222); imshow(im2,[]); title('平均滤波后的灰度图像'); % sobel 垂直梯度模板 Gx = [1 2 1;0 0 0 ;-1 -2 -1]; % sobel 水平梯度模板 Gy = [-1 0 1;-2 0 2;-1 0 1]; % 阈值 T = 0.1; % 增强图像 im3 = im2; % 循环判断 for i = 2:N-1 for j = 2:M-1 dx = sum(sum(im2(i-1:i+1,j-1:j+1).*Gx)); dy = sum(sum(im2(i-1:i+1,j-1:j+1).*Gy)); G = abs(dx)+abs(dy); if G >= T im3(i,j) = G; end end end subplot(223); imshow(im3,[]); title('T=0.1增强的灰度图像'); %% 边缘处 得到了增强,因为边缘处 梯度大 % 阈值 T = 2.5; % 增强图像 im4 = im2; % 循环判断 for i = 2:N-1 for j = 2:M-1 dx = sum(sum(im2(i-1:i+1,j-1:j+1).*Gx)); dy = sum(sum(im2(i-1:i+1,j-1:j+1).*Gy)); G = abs(dx)+abs(dy); if G >= T im4(i,j) = G; end end end subplot(224); imshow(im4,[]); title('T=2.5增强的灰度图像');
(3)实验结果及分析
本次实验题目4的结果如图7所示。
图7 第4题实验结果
通过实验结果可知使用题目给定公式进行增强图像后,图像的边缘处得到了增强,因为边缘处梯度大。当改变阀值T后,发现阈值越大,边缘被增强的效果越差。
5. 图12是线性和非线性混合滤波模板,其中12(a)图的滤波运算如图13所示,请参照给出图12(b)、©两个模板的滤波运算式。
图12 线性和非线性混合滤波模板
图13 (a)图滤波运算式
(1)分析及设计思路
通过给定的12(a)图的运算式,可推理得出图12(b)、12©的运算式。
(2)解答及源码
(b)图的滤波运算如下式:
g(x,y)=MED{1/2 [f(x+2,y-2)+f(x+2,y-1)], 1/2 [f(x-1,y+1)+f(x-2,y+2)],f(x,y), 1/2 [f(x-2,y-2)+f(x-1,y-1)], 1/2[f(x+1,y+1)+f(x+2,y+2)]}
©图的滤波运算如下式:
g(x,y)=MED{1/2 [f(x,y-1)+f(x,y-2)+f(x-1,y-2) +f(x+1,y-2)], 1/2 [f(x,y+1)+f(x,y+2)+f(x-1,y+2)+f(x+1,y+2)],f(x,y), 1/2 [f(x-1,y)+f(x-2,y)+f(x-2,y+1)+f(x-2,y-1)], 1/2[f(x+1,y)+f(x+2,y)+f(x+2,y-1)+f(x+2,y+1)]}
- 分别使用锐化滤波和高频提升滤波对一幅图像(自备)进行锐化。分别显示原图像、平滑后的图像、锐化滤波图像、高频提升滤波图像,以及最后锐化后的增强图像。
(1)分析及设计思路
在锐化滤波中采用sobel算子对图像进行锐化,使用imfilte函数进行平滑处理,自定义函数高频滤波器。
(2)解答及源码
此程序的源码如下:
clear; clc; img1=imread('moon.jpg'); img=rgb2gray(img1); img=im2double(img);%输入图像类型为uint8,将其转换为double类型进行运算 %平滑 Inoised = imnoise(img,'gaussian',0.1,0.005);%对图像进行高斯噪声加噪 %制定卷积核 h=ones(3,3)/5; h(1,1) = 0; h(1,3) = 0; h(3,1) = 0; h(1,3) = 0; %平滑运算 I2=imfilter(img,h); %锐化 f_average = fspecial('average',[3 3]); f_sobel = fspecial('sobel'); f_laplacian = fspecial('laplacian',0); B1 = imfilter(img,f_average); B2 = imfilter(img,f_sobel); B3 = imfilter(img,f_laplacian); figure; subplot(231);imshow(img1);title('原图91703070130'); subplot(232);imshow(img);title('原图91703070130'); %% 平滑 subplot(233);imshow(Inoised);title('添加噪声后的图像'); subplot(234);imshow(I2);title('平滑后的图像'); %% 锐化 subplot(235);imshow(img-B3);title('锐化后的图像'); %% 高频率波 subplot(236);imshow(strength_filter(img,3));title('高频提升滤波后的图像');
(3)实验结果及分析
本次实验题目6的结果如图14所示。
图14 第6题实验结果
7. 右图是一幅受到噪声污染的图像(原始图像见本实验素材),请使用非线性滤波改善其视觉效果。
(1)分析及设计思路
按题目要求采用的是中值滤波器,先是读取图像后检索图像大小并设置为double类型,之后取出图像中与模板对应的数据,将取出数据矩阵变为矢量,计算矢量中值,最后将中值写入中心位置,一共使用33、55、77、99四种模板。
(2)解答及源码
分为两个M文件,程序一是读取图像和展示结果,程序二是中值滤波器。此程序的源码如下:
clear; clc; %% 读入并显示原图 figure('name','原图91703070130','NumberTitle','off'); J=imread('characters_noise.tif'); imshow(J); %% 中值滤波器 n=2; % n=2 选择中值滤波 k=1; % 标识分隔窗口时的窗口号 w=1; if w==1||n==2 % MY中值滤波 figure('name','MY中值滤波','NumberTitle','off'); for j=3:2:9 J2=myfilter2('medium',j,J); subplot(2,2,k); imshow(J2); title([num2str(j),'x',num2str(j),'模版']); k=k+1; end end %程序二 中值滤波器 function Y=myfilter2(type,N,X) %主函数必须位于最上方 switch type case 'medium' Y=medium(N,X); otherwise Y=X; end % /!switch end % /!function Y=myfilter2(type,N,X) %% medium % 中值滤波器,模版为NxN function I=medium(N,X) [height,width]=size(X); % 检索图像大小 dX=double(X); % 保存计算后的图像(double类型) for i=1:height-N+1 for j=1:width-N+1 temp=X(i:i+(N-1),j:j+(N-1)); % 取出图像中与模版对应的数据 s=temp(:); % 将矩阵转变为一个矢量 med=median(s); % 计算矢量的中值 dX(i:i+(N-1)/2,j:j+(N-1)/2)=med;% 将中值写入中心位置 end end I=uint8(dX); end % /! function I=medium(N,X)
(3)实验结果及分析
本次实验题目7的结果如图15、16所示。
图15 原图
图16 第7题实验结果
四 心得体会
这是第二次图像处理实验,很明显感觉得到这一次题的难度比上次提升了许多,导致我在第6题就花费了很多的时间,值得欣慰的是最后还是做出来了,马上临近期末,这门课也要走向尾声,期待后面的大作业和学习。
重庆理工大学图像处理实验二:图像增强相关推荐
- 重庆理工大学图像处理实验三:图像分割
图像处理实验3:图像分割 实验目的和要求 实验内容 实验代码 实验结果 实验目的和要求 掌握点.线和边缘检测常用算子. 掌握MATLAB编程实现图像点.线和边缘检测. 理解霍夫变换的原理. 掌握MAT ...
- 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...
数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...
- 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二
<天津理工大学计算机网络 实验二>由会员分享,可在线阅读,更多相关<天津理工大学计算机网络 实验二(6页珍藏版)>请在人人文库网上搜索. 1.实验报告学院(系)名称:计算机与通 ...
- 北京理工计算机实验二报告,北京理工大学计算机实验二报告表.doc
<北京理工大学计算机实验二报告表.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<北京理工大学计算机实验二报告表.doc>文档请在天天文库搜索. ...
- 数字图像处理实验三图像增强
一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的 感性认识,巩固所学的图像增强的理论知识和相 关算法. (2)熟练掌握直方图均衡化和直方图规定化的计算过 程. (3)熟练掌握空域滤波中常 ...
- 数字图像处理实验(二)
实验目的 实验一:图像增强 了解图像增强的目的及意义,加深对图像增强的感性认知 1. 掌握直接灰度变换的图像增强方法 2. 掌握灰度直方图的概念及其计算方法 3. 掌握直方图均衡化合直方图规定化得计算 ...
- 删除计算机系学生的选课记录6,天津理工大学+数据库实验二.doc
文档介绍: 实验报告学院(系)名称:计算机与通信工程学院姓名Touchkiss学号20125577专业计算机科学与技术班级2班实验项目实验二:复杂SQL数据操作课程名称数据库系统课程代码0668026 ...
- 天津理工大学 计算机网络综合实验,天津理工大学计算机网络实验二.pdf
实验报告 学院(系)名称: 计算机与通信工程学院 姓名 学号 专业 计算机科学与技术 班级 实验名称 实验二:基于 TCP/UDP 的 Socket 编程 课程名称 计算机网络 课程代码 实验时间 实 ...
- MATLAB数字图像处理 实验二:单像素空域图像增强
目录 一.实验目的 二.实验环境 三.实验内容 题目 相关知识 部分核心代码 实验结果 四.实验小结 一.实验目的 1.熟悉基于基于单像素空域图像增强方法,理解并掌握直方图均衡化和规定化实现图像增强 ...
最新文章
- Android发送短消息程序的总结
- [转][Timer学习]wall time和monotonic time
- 【OpenCV3】cv::Mat中的数据按行列写入txt文件中
- c#使用FluentFtp实现一行代码实现ftp上传下载等
- 树:求二叉树的高度和叶子结点数量
- 使用jedis访问redis
- MongoDb和LINQ:如何汇总和加入集合
- 《连线》杂志专访李彦宏:百度all in AI 欲引领智能革命
- 通过adb查看当前页面中显示的窗口Activity名称
- android 手机数据查看及 samsung galaxy s10 开发者模式
- python怎么去掉换行符_python去除空格和换行符的实现方法(推荐)
- CPU与存储器连接习题
- Field II 超声声场仿真(3): 脉冲-回波响应(原理代码)
- 软件设计能力提升之设计匠艺
- “五•一”黄金周市民旅游指南
- 美化生活杂志美化生活杂志社美化生活编辑部2023年第9期目录
- 详解准确率acc、精确率p、准确率acc、F1 score
- Logitech pro wireless GPW狗屁王 适配苹果电脑 Mac
- 计算机专业考研选学校好,计算机专业考研选什么学校比较好?
- 大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配?
热门文章
- 大数据分析平台安全的重要性
- Acwing第 38 场周赛
- 雪色光晕(计算几何+暴力)
- AcWing 836. 合并集合
- [USACO13FEB]Tractor【二分 + BFS】
- 笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧)
- [linux]centOS 7.6重新分配Home目录的大小
- 解决gitlab限制上传大小文件的问题
- ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节
- USB2.0学习笔记连载(四):安装Cypress官网套件