数字图像处理实验记录二(直方图和直方图均衡化)

文章目录

  • 一、基础知识
    • 1,什么是直方图
    • 2,直方图有什么用
    • 3,直方图均衡化
    • 4、原理代码实现
  • 二、实验要求
    • 任务1:
    • 任务2:
  • 三、实验记录
    • 任务1:
    • 任务2:
  • 四、结果展示
    • 任务1:
    • 任务2:
  • 五、反思,总结与收获
    • 1,matlab函数怎么写:
    • 2,坑,图像数据的类型是uint8:
    • 3,均衡化后:
    • 4,规定化后:

前言:由于踩了一些坑,进度就慢了很多,争取尽快赶上进度

一、基础知识

1,什么是直方图

在我看来,直方图就是展示一个图像中每个灰度的数量的图
如下图所示:
在这里插入图片描述
右边这张图就是灰度直方图,横坐标表示灰度,纵坐标表示这个灰度的数量

2,直方图有什么用

有什么用?目前看来就是有个展示作用。当然,我们可以点击这个链接查看直方图对应变化对图像的影响。

3,直方图均衡化

感觉直方图均衡化是一种对直方图进行调整的方法,将现在的直方图按照我们希望的函数排布。
要进行直方图均衡化,首先我们要求出原始图像的直方图,再计算积累直方图:
在这里插入图片描述
对应灰度级的积累直方图就是按照上面公式计算,最后将对应像素的值改成四舍五入后的值就实现了这个操作了

4、原理代码实现

原理:求出积累概率密度后,不能改变灰度像素的数量,就改变灰度值,改变原对应灰度的灰度值
对应积累概率密度*255 = 均衡后灰度
在这里插入图片描述

这里以一张灰度图为例的代码实现:

function [value,Sk] = his_teq(S,L)
% 进行均衡化操作
% S是输入的数据
[height,width] = size(S); %获取输入值的高和宽
if(~exist('L','var'))L = 256;  % 如果未出现该变量,则对其进行赋值
end
[count,x] = imhist(S,L);p = count; %原始图像中各个灰度出现次数
size(count);% 这里算每个灰度的概率
for i=1:Lp(i) = count(i)/height/width;
endSk = p;
for i=1:L %计算积累直方图tmp = 0;for j = 1:itmp=tmp+p(j);endSk(i) = (L-1)*tmp;Sk(i) = round(Sk(i));
end
% 替换
for i=1:heightfor j=1:widtha = int16(S(i,j))+1; %这里是一个坑,我在这里犯了很多次value(i,j) = Sk(a);endend
endvalue = uint8(value);
end

二、实验要求

任务1:

使用函数imhist及histeq对原图进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并讨论为什么数字图像均衡化后其直方图并非完全均匀分布。

任务2:

使用函数histeq对原图进行直方图规定化处理,同屏显示处理前后图像及其直方图,比较异同。

三、实验记录

任务1:

使用函数imhist及histeq对原图进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并讨论为什么数字图像均衡化后其直方图并非完全均匀分布。
这里我们使用imhist()函数展示直方图,用histeq函数进行均衡化:

clc;
clear;
close all;
% 实验三 直方图均衡化
a1 = imread('图片1.png');
a2 = imread('图片2.png');
a2 = rgb2gray(a2);a1_im = imhist(a1);
a2_im = imhist(a2);a1_teq = histeq(a1);
a2_teq = histeq(a2);
figure('NumberTitle','off','Name','任务1');
subplot(241); imshow(a1);title('图片1');
subplot(242); imshow(a1_teq);title('图片1均衡化');
subplot(243); imshow(a2);title('图片2');
subplot(244); imshow(a2_teq);title('图片2均衡化');
subplot(245); imhist(a1);title('图片1的直方图');
subplot(246); imhist(a1_teq);title('图片1均衡化的直方图');
subplot(247); imhist(a2);title('图片2的直方图');
subplot(248); imhist(a2_teq);title('图片2均衡化的直方图');

任务2:

使用函数histeq对原图进行直方图规定化处理,同屏显示处理前后图像及其直方图,比较异同。
规定化步骤:
1,获取模板:a1_im = imhist(a1);像这样,就是先获取直方图
2,使用函数:a3 = histeq(a2,a1_im); 像这样,a2是图片,a1_im是直方图模板
代码:

clc;
clear;
close all;
% 实验三 直方图均衡化a1 = imread('图片1.png');
a2 = imread('图片2.png');
a2 = rgb2gray(a2);a1_im = imhist(a1);
a2_im = imhist(a2);a1_teq = histeq(a1);
a2_teq = histeq(a2);
figure('NumberTitle','off','Name','任务1');
subplot(241); imshow(a1);title('图片1');
subplot(242); imshow(a1_teq);title('图片1均衡化');
subplot(243); imshow(a2);title('图片2');
subplot(244); imshow(a2_teq);title('图片2均衡化');
subplot(245); imhist(a1);title('图片1的直方图');
subplot(246); imhist(a1_teq);title('图片1均衡化的直方图');
subplot(247); imhist(a2);title('图片2的直方图');
subplot(248); imhist(a2_teq);title('图片2均衡化的直方图');
figure('NumberTitle','off','Name','任务2.1');
a3 = histeq(a2,a1_im);
subplot(221); imshow(a2);title('图片2');
subplot(222); imhist(a2);title('图片2的直方图');
subplot(223); imshow(a3);title('图片2规定化');
subplot(224); imhist(a3);title('图片2规定化的直方图');
figure('NumberTitle','off','Name','任务2.2');
a3 = histeq(a1,a2_im);
subplot(221); imshow(a1);title('图片1');
subplot(222); imhist(a1);title('图片1的直方图');
subplot(223); imshow(a3);title('图片1规定化');
subplot(224); imhist(a3);title('图片1规定化的直方图');

四、结果展示

任务1:

在这里插入图片描述

任务2:

按图片1的直方图规定化图片2:
在这里插入图片描述
按图片2直方图规定化图片1:
在这里插入图片描述

五、反思,总结与收获

1,matlab函数怎么写:

function [output] = name(input1,input2)
% 注释,说明函数的功能
output = 1 %内容
end %结束标志

2,坑,图像数据的类型是uint8:

图像数据类型是uint8,也就说明了这个没有符号,范围在0~255,所以如果你想取其作为下标或者进行计算的话需要注意。
如在这里:
在这里插入图片描述
S(i,j)可能会为255,当我们直接显示Sk(S(i,j)+1)时,S(i,j)=255,S(i,j)+1也等于255,因为matlab把它默认成了uint8数,所以在运算之前,我们要对其类型进行改变,这样才能运算

3,均衡化后:

均衡化后,其结果并不会如我们想象那样那么均衡,往往会如以下:
在这里插入图片描述
这个是按256个灰度值进行均衡化的
为什么数字图像均衡化后其直方图并非完全均匀分布呢?在我看来,其实是因为原图像的直方图本来就不是很均衡,甚至有突出的地方,在后续计算概率密度直方图时,哪个灰度值的数量多,对应的概率也就大,这样也就导致了均衡化后的直方图变成和原图差不多的样子。

4,规定化后:

在这里插入图片描述
在这里插入图片描述
不难看出,规定化是按照一个直方图的模板对另一个直方图进行变换,规定化后的直方图和模板直方图很相似

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

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

相关文章

技巧 | 如何解决 OBS 系统声音无法捕获问题 | Mac

技巧 | 如何解决 OBS 系统声音无法捕获问题 | Mac 问题描述 由于 macOS 系统限制,桌面音频被禁止,导致在使用 OBS 无法录制桌面音频,只能使用自带麦克风录制。 解决方法 Loopback 介绍 借助 Loopback 的强大功能,可以轻松地…

【微信小程序调试工具试用】

【微信小程序调试工具试用】 试用大佬开发的dll拿到某物小程序sign签名 (过于简单 大佬勿喷)本次工具分享到此结束 什么是爬虫逆向? 试用大佬开发的dll拿到某物小程序sign签名 (过于简单 大佬勿喷) 1 如图 下面小程序…

2023年中国润滑油分散剂市场需求量及行业竞争现状分析[图]

润滑油分散剂是一种两亲性化学品,可以增加油性部分以及水性部分在同一体系中的相容性,能降低分散体系中固体或液体粒子聚集的物质。换油时,可将有害的悬浮物从油中清除。 国内从60年代末开始试制丁二酰亚胺型分散剂,并于80年代初在…

Linux高性能服务器编程 学习笔记 第十七章 系统监测工具

tcpdump是一款经典的抓包工具,即使今天我们已经有了像Wireshark这样更易于使用和掌握的抓包工具,tcpdump仍是网络程序员的必备利器。 tcpdump提供了一些选项用以过滤数据包或定制输出格式,常见的选项如下: 1.-n:使用I…

WPF实现签名拍照功能

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【计算机网络笔记】计算机网络性能(1)——速率、带宽、延迟

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 系列文章目录速率带宽延迟/时延(delay或latency) 下面介绍一些计算机网络中常用的性能指标。在本篇中涉及速…

uniapp(uncloud) 使用生态开发接口详情5(云公共模块)

1.uniCloud官网 云对象中云公共模块: 网站: https://uniapp.dcloud.net.cn/uniCloud/cf-common.html // 官网介绍 cloudfunctions├─common // 云函数公用模块目录| └─hello-common // 云函数公用模块| ├─package.json| └─index.js // 公用模块代码&#xff0…

一些经典的神经网络(第17天)

1. 经典神经网络LeNet LeNet是早期成功的神经网络; 先使用卷积层来学习图片空间信息 然后使用全连接层来转到到类别空间 【通过在卷积层后加入激活函数,可以引入非线性、增加模型的表达能力、增强稀疏性和解决梯度消失等问题,从而提高卷积…

VR全景图片如何拍摄制作,拍摄制作过程中要注意什么?

引言: VR全景图片就是通过专业的相机设备捕捉到的一个空间的高清图像,再经过专业工具进行拼合,呈现出一种环绕式的视觉效果。想象一下,当你站在一个完全真实的环境中,可以自由地转动视角,看到四周的景色&a…

Unreal Engine 4 + miniconda + Python2.7 + Pycharm

1.​首先启用UE4插件里的Python Scripting插件 ​ 2. 在UE4项目设置中 开启Python开发者模式 生成unreal.py文件,用于在Pychram中引入Unreal PythonAPI 生成的unreal.py 在: "项目路径\Intermediate\PythonStub\unreal.py"3. 安装Miniconda…

【Axure高保真原型】3D柱状图_中继器版

今天和大家分享3D柱状图_中继器版的原型模板,图表在中继器表格里填写具体的数据,调整坐标系后,就可以根据表格数据自动生成对应高度的柱状图,鼠标移入时,可以查看对应圆柱体的数据……具体效果可以打开下方原型地址体验…

浅谈云原生

目录 1. 云原生是什么? 2. 云原生四要素 2.1 微服务 2.2 容器化 2.3 DevOps 2.4 持续交付 3. 具体的云原生技术有哪些? 3.1 容器 (Containers) 3.2 微服务 (Microservices) 3.3 服务网格 (Service Meshes) 3.4 不可变基础设施 (Immutable Inf…