空域图像增强-图像灰度变换

news/2024/5/7 20:09:22/文章来源:https://blog.csdn.net/weixin_42048463/article/details/128127150

1.图像灰度变换。自选一张图片,完成以下图像处理:①显示图像的灰度直方图;②直方图均衡化,对比变化前后的图像和灰度直方图;③对图像进行线性灰度变换,对某部分灰度值进行扩展,压缩其它灰度值区域,对比变化前后的图像和灰度直方图。

图像增强:

·图像不清晰、不突出是由多种因素造成的, 如采集中未突出所需部分, 有干扰(噪声、散斑、运动模糊等等).

·目标是比原图像更适合于特定的应用, 便于识别和后继处理.

·不同的问题采用不同的方法, 评价结果好坏没有统一的标准.

改善降质图像的方法:

·图像增强: 不考虑降质原因, 关心有用信息, 抑制次要部分, 去干扰, 增强对比度, 不一定要逼近原图像.

·复原技术: 针对降质原因, 设法补偿降质因素, 尽可能逼近原始图像, 恢复原图.

图像增强和复原技术有重叠部分. 增强带有恢复性质, 突出有用信息, 且是局部性恢复.

图像灰度变换:

·按一定变换关系, 逐点改变原图像中每一个像素灰度值的方法.

·是图像增强处理技术中一种非常基础、直接的空间域图像处理方法.

·目的是为了改善画质, 使图像的显示效果更加清晰.

点运算:

·输入图像为f(x, y), 输出图像为g(x, y).

·点运算为g(x, y) = T[f(x, y)], 是一种像素的逐点运算. 

·描述了输入和输出值之间的转换关系.

·不改变空间位置关系.

·点运算又称为”对比度增强”、”对比度拉伸”、”灰度变换”.

根据g(x, y) = T[f(x, y)]可以将灰度变换分为线性变换和非线性变换.

灰度线性变换:

·输出灰度级与输入灰度级呈线性关系的点运算.

.

·如果a > 1, 输出图像的对比度增大.

·如果a < 1, 输出图像的对比度减小.

·如果a=1, b≠0, 使所有像素的灰度值上移或下移, 使整张图像更暗或更亮.

·如果a=1, b=0, 输出图像与输入图像相同.

·如果a < 0, 暗区域将变亮, 亮区域将变暗.

反转变换:

g(x, y) = 255 - f(x, y).

分段线性变换:

有时为了保持f(x, y)灰度低端和高端值不变, 用下式

灰度非线性变换:

·输出灰度级与输入灰度级呈非线性关系的点运算.

灰度对数变换:

·对原图像的动态范围进行压缩.

.

灰度指数运算:

灰度直方图: 表示图像中具有某种灰度级的像素的个数, 它反映了图像中每种灰度出现的频率. 灰度直方图是图像最基本的统计特征.

·横坐标: 灰度级.

·纵坐标: 该灰度级出现的个数.

直方图效果图:

·四种基本图像类型, 暗、亮、低对比度和高对比度以及它们对应的直方图.

·从图像灰度级的分布可以看出一幅图像的灰度分布特性: a) 较暗; b) 偏亮.

直方图的性质:

  1. 只反映该图像中不同灰度值出现的次数(或频数), 而未反映某一灰度值像素所在位置. 丢失了位置信息.
  2. 图像与直方图之间是多对一的映射关系.
  3. 由于直方图是对具有相同灰度值的像素统计得到的, 因此一幅图像各子区的直方图之和等于该图像全图的直方图.

直方图计算:

在离散形式下, 用代表离散灰度级, 为图像中出现级灰度的像素数, 是图像像素总数, 级灰度的像素的频数.

 

直方图均衡化:

    经变换后得到的新直方图不是很平坦, 但比原始图像的直方图平坦的多, 扩展了动态范围. 对于对比度较弱的图像进行处理十分有效.

变换后的灰度级减少, 这种现象叫做”简并”现象. 由于简并现象的存在, 处理后的灰度级总是要减少的.

以一个经典的例子掌握直方图均衡化的计算过程.

灰度级

0

1

2

3

4

5

6

7

像素数

790

1023

850

656

329

245

122

81

概率

0.19

0.25

0.21

0.16

0.08

0.06

0.03

0.02

依次求和

0.19

0.44

0.65

0.81

0.89

0.95

0.98

1.00

乘灰度级

1.33

3.08

4.55

5.67

6.23

6.65

6.86

7.00

取整

1

3

5

6

6

7

7

7

[注] 取整之后的值就是映射之后的坐标.

下面写出映射后的直方图.

灰度级

0

1

2

3

4

5

6

7

均衡化

0.19

0.25

0.21

0.24

0.11

1.1 显示图像的灰度直方图 

%gray histogram
I = imread('Durant.png');
%显示原图
subplot(1, 3, 1);
imshow(I);
title('原始图像');
%
subplot(1, 3, 2);
y = rgb2gray(I);
imshow(y);
title('灰度图');
%
subplot(1, 3, 3);
imhist(y);
title('gray histogram');

 1.2 直方图均衡化 

%histogram equalization
I = imread('Durant.png');
%进行灰度变换
I_gray = rgb2gray(I);
%对图像I_gray进行直方图均衡化
%直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度, 
%输出图像的灰度直方图近似与给定的直方图相匹配. 
%J = histeq(I, N): 
%将灰度图像I转化成具有N个离散灰度级的灰度图像J, N缺省值为64. 
J = histeq(I_gray, 64);
%显示I_gray
subplot(1, 4, 1);
imshow(I_gray);
title('灰度图像');
%
subplot(1, 4, 2);
imshow(J);
title('均衡化后的灰度图像');
%
subplot(1, 4, 3);
%imhist是MATLAB图像处理模块中的一个函数, 
%用于提取图像中的直方图信息. 
imhist(I_gray);
title('灰度图像的直方图');
%
subplot(1, 4, 4);
imhist(J);
title('均衡化后的直方图'); 

(N=64)

(N=128)

 (N=2)

1.3 线性灰度变换与分段线性灰度变换 

1.3.1 线性灰度变换 

线性灰度变换: 
%linear gray-scale transformation
%
I = imread('Durant.png');
%
I_gray = rgb2gray(I);
%
I_gray2 = I_gray - 50;
I_gray3 = I_gray + 50;
I_gray4 = I_gray * 0.5;
I_gray5 = I_gray * 2.0;
% 
subplot(1, 11, 1);
imshow(I);
title('原图');
%
subplot(1, 11, 2);
imshow(I_gray);
title('原图的灰度图');
%
subplot(1, 11, 3);
imhist(I_gray);
title('原图的灰度直方图');
%
subplot(1, 11, 4);
imshow(I_gray2);
title('Igray2 = Igray - 50');
%
subplot(1, 11, 5);
imhist(I_gray2);
%
subplot(1, 11 ,6);
imshow(I_gray3);
title('Igray3 = Igray + 50');
%
subplot(1, 11, 7);
imhist(I_gray3);
%
subplot(1, 11, 8);
imshow(I_gray4);
title('Igray4 = Igray * 0.5');
%
subplot(1, 11, 9);
imhist(I_gray4);
%
subplot(1, 11, 10);
imshow(I_gray5);
title('Igray5 = Igray * 2.0');
%
subplot(1, 11, 11);
imhist(I_gray5);

 1.3.2 分段线性灰度变换 

%对图像进行分段线性变换 
%用底层算法实现 
image = imread('Durant.png');
%rgb2gray是MATLAB内部一种处理图像的函数. 
%通过消除图像色调和饱和度信息, 同时保留亮度, 
%实现将RGB图像或彩色图像转换为灰度图像. 
%即灰度化处理. 
image_gray = rgb2gray(image);
%image(:,:,1): 获取三维矩阵image中第一维、第二维的全部元素 
image_matrix = image_gray(:,:,1);
%将image_matrix数组中的元素类型转换为double类型
%image_matrix = double(image_matrix);
%size(image): 
%将三维矩阵image的行数给height, 
%将.............的列数给width, 
%将...........的通道数给channels. 
[height, width, channels] = size(image_gray);
%创建一个height×width的零矩阵
G = zeros(height, width);
%标定坐标点
x1 = 40; 
x2 = 130;
y1 = 50;  
y2 = 190;
%创建一个1×255的零向量
%灰度映射表, 灰度在0到255之间
%注: f(0) = 0
gray_map = zeros(1, 255);
%计算灰度映射表 
%当x < x1时, 灰度变换函数为
%f(x) = y1 / x1 * x
for i = 1 : x1 - 1 %i从1到x1-1, 步长默认为1gray_map(i) = y1 * i / x1;
end
%当x1 ≤ x ≤ x2时, 灰度变换函数为
%f(x) = (y2 - y1)*(x - x1) / (x2 - x1) + y1
for i = x1 : x2 %i从x1到x2, 步长默认为1gray_map(i) = (y2 - y1) * (i - x1) / (x2 - x1) + y1;
end
%当x > x2时, 灰度变换函数为 
%f(x) = (255 - y2)*(x - x2) / (255 - x2) + y2
for i = x2 + 1 : 255 %i从x2+1到255gray_map(i) = (255 - y2) * (i - x2) / (255 - x2) + y2;
end
%
for i = 1 : heightfor j = 1 : width%遍历image_matrix矩阵的每一个元素T = image_matrix(i, j); %分析图片矩阵中坐标为(i, j)的元素if(T == 0)G(i, j) = 0; elseG(i, j) = gray_map(T); %根据映射关系, 将映射后的值放入G矩阵中坐标(i ,j)的位置endend
end
%将G矩阵中的元素类型转换为uint8(0~255)
image_out = uint8(G);
%显示原图的灰度图像
subplot(1, 4, 1);
imshow(image_gray);
title('原图的灰度图像');
%显示原图(灰度图像)的直方图
subplot(1, 4, 2);
imhist(image_gray);
title('原图灰度图像的直方图');
%显示处理后的图像
subplot(1, 4, 3);
imshow(image_out);
title('处理后的图像');
%显示处理后(灰度图像)的直方图
subplot(1, 4, 4);
imhist(image_out);
title('处理后的灰度直方图');

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【发表案例】智能物联网类SCIEI,仅25天录用,计算机领域必投SCI快刊,12月截稿

【期刊简介】3.5-4.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCI&EI双检&#xff0c;正刊 【征稿领域】基于人工智能的工业物联网智能传感器 【参考周期】3个月左右 【截稿日期】2022年12月30日 【期刊简介】2.0-3.0&#xff0c;JCR3区&#xff0c;中科院…

unable to find valid certification path to requested target

调用https接口时出现该异常&#xff0c; Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 原因是可以看上图…

介绍一款特别好用的java反编译工具jd-gui

目录 写在前面 开始 写在前面 之前用过另一款java反编译工具jad 但是这个工具有个问题就是对于一些java8的新特性&#xff0c;比如lambda表达式是解析不出来的&#xff0c;更不用说java9和java17了。关于这款工具的使用方法就不再这里赘述了&#xff0c;如果你感兴趣可以在网…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面&#xff0c;我们要讨论了 Promise 在异步编程中的执行&#xff0c;错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中&#xff0c;我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…

代码文档

为您的团队和您未来的自己代码文档。 Intuition 代码告诉你_怎么_做&#xff0c;注释告诉你_为什么_。——杰夫阿特伍德 可以通过代码文档来进一步组织代码&#xff0c;让其他人&#xff08;以及未来的自己&#xff09;更容易轻松地导航和扩展它。在完成编写代码库的那一刻就最…

【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?

摘要&#xff1a;AI技术发展&#xff0c;正由应用落地阶段向效率化生产阶段演进&#xff0c;AI工程化能力将会不断深入业务&#xff0c;释放企业生产力。本文分享自华为云社区《【云享人物】华为云AI高级专家白小龙&#xff1a;AI如何释放应用生产力&#xff0c;向AI工程化前行…

通过SCADA实现KPI分析和预测性维护远比想象中简单

一、前言 随着工业发展的不断进步&#xff0c;越来越多的企业开始注重KPI分析和预测性维护。通过数据分析实现智能制造已经成为不可缺少的环节。制定并分析关键绩效指标&#xff08;KPI&#xff09;是实现数据分析战略的重要一步&#xff0c;因为只有跟踪这些关键绩效指标才能…

【自然语言处理(NLP)】基于Bi-DAF的机器阅读理解

【自然语言处理&#xff08;NLP&#xff09;】基于Bi-DAF的机器阅读理解 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国高等学…

Flume环境搭建

1、新建一个专门放文件的目录&#xff1a;mkdir /export/server 2、将Flume的安装包上传到/export/server目录并解压&#xff0c;重命名&#xff1a; tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /export/server mv apache-flume-1.8.0-bin flume 3、修改flume-env.sh文件…

威尔士和英格兰同属英国,但为啥还要在世界杯上进行PK?

聊到威尔士VS英格兰队的比赛&#xff0c;那就不得不普及一个足球常识啊。当我们打开英国的地图&#xff0c;你会发现有四个地区英格兰&#xff0c;苏格兰&#xff0c;威尔士和北爱尔兰都是属于英国的。我们还会常常看到英格兰&#xff0c;苏格兰&#xff0c;威尔士和北爱尔兰四…

FPGA控制W5500完成UDP环回测试

FPGA控制W5500完成UDP环回测试&#xff11; 前言&#xff12; 前期准备&#xff13; &#xff37;5500寄存器描述4 &#xff37;5500 环回测试4.1 W5500初始化4.1.1 通用寄存器初始化4.1.2 socket寄存器初始化4.2 W5500数据接收4.3 W5500数据发送4.4 数据环回5 总结&#x…

Android: SimpleAdapter+GridView 简单图片展示

1&#xff1a;原理解析&#xff1a; 一个xml放总布局&#xff0c;一个xml放适配器要加载的模板&#xff08;我喜欢这样理解&#xff09;&#xff1b; java中写适配事件&#xff1b; 2&#xff1a;目录&#xff1a; 3&#xff1a;主布局&#xff1a;最重要的是要放一个GridView …

ByteX-shrink_r源码解析

背景 为什么要对R文件内联处理&#xff1f; 这里首先说一下Android R文件的产生&#xff0c;对于Android开发者我们都知道&#xff0c;当我们要使用要使用一些布局文件&#xff0c;drawable等其他资源时&#xff0c;可以直接用 R.id. R.drawble.等直接使用&#xff0c;而这个…

易基因科技|单细胞甲基化测序低至2500元/样

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。12月活动来袭&#xff5e; 限时特惠&#xff01;单细胞甲基化测序低至2500元/样&#xff01; 易基因高通量单细胞DNA甲基化测序&#xff1a;单细胞DNA甲基化组学研究很大程度上受制于建库…

定时执行专家 —— 使用网络唤醒功能实现远程开机

目录 ◆ 关于网络唤醒 ◆ 定时执行专家 - 远程开机功能 - 设置方法 ◆ 使用网络唤醒实现远程开机的一些前提条件 ◆ 关于网络唤醒 Wake-on-LAN简称WOL或WoL&#xff0c;中文多译为“网上唤醒”、“远程唤醒”技术。WOL是一种技术&#xff0c;同时也是该技术的规范标准&…

CSS自定义属性与前端页面的主题切换

基于级联变量的CSS自定义属性&#xff0c;已经出来很多年了。 虽然有less、sass等预处理器大行其道&#xff0c;但是自定义属性也有它的特点和用处&#xff0c;诸如在js中读写、作用域设置等等&#xff0c;在处理UI主题切换等功能上也发挥着很大的作用。 自定义属性 CSS自定义…

[附源码]SSM计算机毕业设计学习资源共享与在线学习系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux驱动: rtc子系统

1. 前言 限于作者能力水平&#xff0c;本文可能存在的谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文分析代码基于Linux 3.10内核&#xff0c;硬件平台为嵌入式ARM32平台. 3. rtc子系统 3.1 相关代码文件列表 drivers/rtc/class.c …

Lactoferrin-PEG-alginate 乳铁蛋白-聚乙二醇-海藻酸钠

产品名称&#xff1a;乳铁蛋白-聚乙二醇-海藻酸钠 英文名称&#xff1a;Lactoferrin-PEG-alginate 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、1k、…

Redis高级篇——Redis的优化

一、Redis的键值设计 1.1key的结构 Redis的Key在自定义时&#xff0c;最好遵循以下三个规则&#xff1a; 基本格式&#xff1a;[业务名称]&#xff1a;[数据名]&#xff1a;[id]长度不超过44字节不包含特殊字符 如&#xff1a;登录业务&#xff0c;保存用户信息的key 定义为…