实验三 图像增强—灰度变换

一、实验目的:

1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。

2、学会对图像直方图的分析。

3、掌握直接灰度变换的图像增强方法。

二、实验原理及知识点

术语‘空间域’指的是图像平面本身,在空间域内处理图像的方法是直接对图像的像素进行处理。空间域处理方法分为两种:灰度级变换、空间滤波。空间域技术直接对像素进行操作其表达式为

                                                                 g(x,y)=T[f(x,y)]

其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行处理的操作符,定义在点(x,y)的指定领域内。

定义点(x,y)的空间邻近区域的主要方法是,使用中心位于(x,y)的正方形或长方形区域。此区域的中心从原点(如左上角)开始逐像素点移动,在移动的同时,该区域会包含不同的邻域。T应用于每个位置(x,y),以便在该位置得到输出图像g。在计算(x,y)处的g值时,只使用该邻域的像素。

灰度变换T的最简单形式是使用大小为1×1的邻域,此时,(x,y)处的g值仅由f在该点处的亮度决定,T也变为一个亮度或灰度级变化函数。当处理单设(灰度)图像时,这两个术语可以互换。由于亮度变换函数仅取决于亮度的值,而与(x,y)无关,所以亮度函数通常可写做如下所示的简单形式:

                                                                          s=T(r)

其中,r表示图像f中相应点(x,y)的亮度,s表示图像g中相应点(x,y)的亮度。

2.1灰度变换函数

重点使用imadjuststretchlim函数

q=imadjust(I, [low_in; high_in], [low_out; high_out], gamma)

python的基本实现https://stackoverflow.com/questions/39767612/what-is-the-equivalent-of-matlabs-imadjust-in-python

stretchlim在matlab原型如下:

Low_High = stretchlim(f, tol)

其中f是一张灰度图片,tol如果是一个两元素向量[low_frac high_frac],指定了图像低和高像素的饱和度百分比,tol如果是一个标量,那么

low_frac = tol, high_frac = 1 - low_frac。

tol默认值是[0.01 0.99]。简单的说,就是计算两个阈值,(默认情况)其中low代表小于这个值的像素占整张图片的1%,其中high代表大于这个值的像素占整张图片的1-0.99=1%。

如果选择tol=0,low_frac=[min(f(:)) max(f(:))] 。

通常利用stretchlim配合imadjust来自动地提高图片的对比度,而不关心参数高低的处理

2.2对数及对比度扩展

三、实验内容(不限编程语言、也可自行选择实验图像):

(1)灰度变换imadjust、intrans函数和stretchlim函数的使用。

对数变化mat2gray函数的使用,例如:

1、图像数据读出

2、计算并分析图像直方图

3、利用直接灰度变换法对图像进行灰度变换

下面给出灰度变化的MATLAB程序

f=imread('medicine_pic.jpg');%或者选lenna.jpgg=imhist(f,256);            %显示其直方图g1=imadjust(f,[0 1],[1 0]);    %灰度转换,实现明暗转换(负片图像)figure,imshow(g1)

%将0.5到0.75的灰度级扩展到范围[0 1]g2=imadjust(f,[0.5 0.75],[0 1]);figure,imshow(g2)g=imread('point.jpg');h=log(1+double(g));    %对输入图像对数映射变换h=mat2gray(h);         %将矩阵h转换为灰度图片h=im2uint8(h);         %将灰度图转换为8位图figure,imshow(h)

(2)图像的几何变换(图像的缩放)、旋转、镜像变换

旋转函数(思考并实现镜像变换。所谓的镜像,通俗地讲,是指在镜子中所成的像。其特点是左右颠倒或者是上下颠倒。镜像分为水平镜像和垂直镜像。)

B = imrotate(A,angle)B = imrotate(A,angle,method)B = imrotate(A,angle,method,bbox)示例:img_w = 640;img_h = img_w;img_oblique_rect = zeros(img_h, img_w);% create a oblique(45) rectangle in the matrixx1 = int32(img_w / 5 * 2); x2 = int32(img_w / 5 * 3);y1 = int32(img_h / 7); y2 = int32(img_h / 7 * 6);% 下面这句代码产生一个常规矩形。img_oblique_rect(y1:y2, x1:x2) = 1;% 利用双线性插值算法对图像进行旋转, 产生一个斜矩形img_oblique_rect=imrotate(img_oblique_rect,45,'bilinear','crop');img_oblique_rect = imcomplement(img_oblique_rect);figure('Name', '这是一个斜矩形'), imshow(img_oblique_rect)

三.实验程序、实验结果与实验分析

1. 实验程序

(1)灰度变换imadjust、intrans函数和stretchlim函数的使用

f=imread('medicine_pic.jpg');%或者选lenna.jpgimhist(f,256);          %显示其直方图g1=imadjust(f,[0 1],[1 0]);    %灰度转换,实现明暗转换(负片图像)figure,imshow(g1),title('负片图像');%将0.5到0.75的灰度级扩展到范围[0 1]g2=imadjust(f,[0.5 0.75],[0 1]);figure, imshow(g2), title('灰度级扩展后的图像');g=imread('point.jpg');h=log(1+double(g));    %对输入图像对数映射变换h=mat2gray(h);         %将矩阵h转换为灰度图片h=im2uint8(h);         %将灰度图转换为8位图figure,imshow(h),title('对数映射变换图像');

(2)图像的几何变换(图像的缩放)、旋转、镜像变换

I=imread('Cameraman.tif');figure,imshow(I),title('原始图像');scale=0.5;J=imresize(I,scale);figure,imshow(J),title('图像缩小为原始大小一半的图像');img_w = 640;img_h = img_w;img_oblique_rect = zeros(img_h, img_w);% create a oblique(45) rectangle in the matrixx1 = int32(img_w / 5 * 2); x2 = int32(img_w / 5 * 3);y1 = int32(img_h / 7); y2 = int32(img_h / 7 * 6);% 下面这句代码产生一个常规矩形。img_oblique_rect(y1:y2, x1:x2) = 1;imshow(img_oblique_rect),title('常规矩形');% 利用双线性插值算法对图像进行旋转, 产生一个斜矩形img_oblique_rect=imrotate(img_oblique_rect,45,'bilinear','crop');img_oblique_rect = imcomplement(img_oblique_rect);figure('Name', '这是一个斜矩形'), imshow(img_oblique_rect),title('斜矩形');

2. 实验结果

(1)灰度变换imadjust、intrans函数和stretchlim函数的使用(Test3_1)

①图像medicine_pic的直方图

②负片图像

③灰度级扩展后的图像

④对数映射变换图像

(2)图像的几何变换(图像的缩放)、旋转、镜像变换(Test3_2)

①原始图像

②图像缩小为原始大小一般的图像

③常规矩形

④斜矩形

3. 实验分析

(1)灰度变换imadjust、intrans函数和stretchlim函数的使用

①读入图像medicine_pic.jpg
f=imread('medicine_pic.jpg');imhist(f,256);          %显示其直方图
②使用imadjust()函数进行灰度转换,实现明暗转换(负片图像)
g1=imadjust(f,[0 1],[1 0]);    %灰度转换,实现明暗转换(负片图像)figure,imshow(g1),title('负片图像');%将0.5到0.75的灰度级扩展到范围[0 1]
③使用imadjust()函数将图像的灰度级扩展到[0 1]
g2=imadjust(f,[0.5 0.75],[0 1]);figure, imshow(g2), title('灰度级扩展后的图像');
④读入图像point.jpg
g=imread('point.jpg');
⑤对输入图像对数映射变换
h=log(1+double(g));
⑥将矩阵h转换为灰度图片   
h=mat2gray(h); 
⑦将灰度图转换为8位图       
h=im2uint8(h);          figure,imshow(h),title('对数映射变换图像');

(2)图像的几何变换(图像的缩放)、旋转、镜像变换

通过对图像进行缩放和旋转操作,可以改变图像的尺寸和角度,从而实现图像的变换和几何形状的调整。

①读入图像Cameraman.tif
②使用imresize()函数将原始图像缩小为原始大小的一半
scale=0.5;J=imresize(I,scale);
创建了一个大小为 640x640 的零矩阵,并在矩阵中创建了一个常规矩形
img_w = 640;img_h = img_w;img_oblique_rect = zeros(img_h, img_w);x1 = int32(img_w / 5 * 2); x2 = int32(img_w / 5 * 3);y1 = int32(img_h / 7); y2 = int32(img_h / 7 * 6);img_oblique_rect(y1:y2, x1:x2) = 1;
使用imrotate()函数对图像进行了旋转,角度为45度,使用双线性插值算法,并通过'crop'参数进行裁剪,以防止旋转后的图像超出原始图像范围。
img_oblique_rect=imrotate(img_oblique_rect,45,'bilinear','crop');
将旋转后的图像进行反转(黑白翻转)
img_oblique_rect = imcomplement(img_oblique_rect);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1472911.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第17天|ChatGLM-6B聊天demo

一、简介: 本次实验,基于MindNLP和ChatGLM6B模型搭建一个小的聊天应用,ChatGLM6B 是基于 GLM-4 模型开发的开源对话机器人,拥有 62 亿个参数,能够进行自然流畅的语言交流。在对话中,ChatGLM6B 可以胜任文案…

js函数扩展内容---多参数,函数属性,字符串生成函数

1.多参数 在js中,Math.max()方法可以接受任意数量的参数, Math.max(1,2,3,4);//4 Math.max(1,2,3,4,5,6,7,8,9,10)//10 在max方法里面有一个rest参数,它接受了所有参数全部合成到了一个number数组里面, function rest(a,b,...a…

管理才是最根本的核心竞争力

相信大家对于华为提出的“管理是核心竞争力”“管理才是企业的核心竞争力”等言论并不陌生,而华为的确也一直践行这样的理念。比如,在华为发展历史上很艰难的2002年,华为仍然坚持重点抓管理。总裁任正非后来提到:“2002年华为快崩…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本,因为新版本可能出现与python不匹配问题。 我选择3.6.3版本,因为我安装的python是3.8,可以匹配版本。同时window操…

价值499的从Emlog主题模板PandaPRO移植到wordpress的主题

Panda PRO 主题,一款精致wordpress博客主题,令人惊叹的昼夜双版设计,精心打磨的一处处细节,一切从心出发,从零开始,只为让您的站点拥有速度与优雅兼具的极致体验。 从Emlog主题模板PandaPRO移植到wordpres…

信创-系统架构师认证

随着国家对信息技术自主创新的战略重视程度不断提升,信创产业迎来前所未有的发展机遇。未来几年内,信创产业将呈现市场规模扩大、技术创新加速、产业链完善和国产化替代加速的趋势。信创人才培养对于推动产业发展具有重要意义。应加强高校教育、建立人才…

Infinitar链游新发展新机遇

区块链游戏市场在近年来经历了显著增长,吸引了大量的投资和关注。随着加密货币和NFT(非同质化代币)概念的普及,越来越多的投资者、游戏开发者和看到了区块链技术在游戏领域的应用潜力,纷纷涌入市场。区块链游戏的用户量…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

知名品牌因商标痛失市场:114家直营店山寨店7000多家!

奶茶知名品牌“鹿角巷”当年红遍大江南北,是最早的新茶饮品牌,但是当年商标注册存在问题,被同行奶茶品牌抢占了先机,发声明“对大陆商标注册细则不详,在商标注册过程中让假店钻了法律空档”,最夸张的时候全…

python实践-实现TTS项目的应用

#coqui-ai TTS 项目地址# 版本: V0.22.0 博主使用的python版本:3.10.6 一、项目下载安装 下载: git或者直接下载都可 git clone https://github.com/coqui-ai/TTS.git 建议选择压缩包下载,选好对应版本。方便github会卡的小…

51单片机STC89C52RC——14.1 直流电机调速

目录 目的/效果 1:电机转速同步LED呼吸灯 2 通过独立按键 控制直流电机转速。 一,STC单片机模块 二,直流电机 2.1 简介 2.2 驱动电路 2.2.1 大功率器件直接驱动 2.2.2 H桥驱动 正转 反转 2.2.3 ULN2003D 引脚、电路 2.3 PWM&…

【刷题汇总--游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)】

C日常刷题积累 今日刷题汇总 - day0051、游游的you1.1、题目1.2、思路1.3、程序实现 - 蛮力法1.4、程序实现 - 贪心(优化) 2、腐烂的苹果2.1、题目2.2、思路2.3、程序实现 - bfs 3、孩子们的游戏(圆圈中最后剩下的数)3.1、题目3.2、思路3.3、程序实现 -- 环形链表3.4、程序实现…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【生成密钥(C/C++)】

生成密钥(C/C) 以生成ECC密钥为例,生成随机密钥。具体的场景介绍及支持的算法规格。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复…

(2024)KAN: Kolmogorov–Arnold Networks:评论

KAN: Kolmogorov–Arnold Networks: A review 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. MLP 也有可学习的激活函数 2. 标题的意义 3. KAN 是具有样条基激活函数的 M…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

《安全行业大模型技术应用态势发展报告(2024)》

人工智能技术快速迭代发展,大模型应用场景不断拓展,随着安全行业对人工智能技术的应用程度日益加深,大模型在网络安全领域的应用潜力和挑战逐渐显现。安全行业大模型技术的应用实践不断涌现,其在威胁检测、风险评估和安全运营等方…

idm下载慢怎么回事 idm批量导入下载使用方法

IDM (Internet Download Manager)是一款兼容性大,支持多种语言的下载管理软件,它可以自动检测并下载网页上的内容,这正是这一优点,使得它受到了广大用户的喜爱。在日常使用互联网的过程中,快速下载文件对我们来说非常重…

Patch SCN使用说明---惜分飞

软件说明 该软件是惜分飞(https://www.xifenfei.com)开发,仅用来查看和修改Oracle数据库SCN(System Change Number),主要使用在数据库因为某种原因导致无法正常启动的情况下使用该工具进行解决.特别是Oracle新版本中使用隐含参数,event,orad…

RH850系列芯片深度剖析 1.8-内存管理之MPU

RH850系列芯片深度剖析 1.8-内存管理之MPU 文章目录 RH850系列芯片深度剖析 1.8-内存管理之MPU一、MPU简介1.1 功能特性1.2 系统保护标识符(SPID)二、保护区域设置2.1 保护区域属性设置2.2 保护区域设置注意事项2.2.1 跨越保护区域边界2.2.2 无效的保护区域设置2.2.3 保护违规…

2-3 图像分类数据集

MNIST数据集是图像分类任务中广泛使用的数据集之一,但作为基准数据集过于简单,我们将使用类似但更复杂的Fashion-MNIST数据集。 %matplotlib inline import torch import torchvision # pytorch模型关于计算机视觉模型实现的一个库 from torch.utils i…