matlab显示二值直方图,图像灰度变换、二值化、直方图

1、灰度变换

1)灰度图的线性变换

Gnew = Fa * Gold + Fb。

Fa为斜线的斜率,Fb为y轴上的截距。

Fa>1 输出图像的对比度变大,否则变小。

Fa=1 Fb≠0时,图像的灰度上移或下移,效果为图像变亮或变暗。

Fa=-1,Fb=255时,发生图像反转。

注意:线性变换会出现亮度饱和而丢失细节。

2)对数变换

t=c * log(1+s)

c为变换尺度,s为源灰度,t为变换后的灰度。

对数变换自变量低时曲线斜率高,自变量大时斜率小。所以会放大图像较暗的部分,压缩较亮的部分。

3)伽马变换

y=(x+esp)γ,x与y的范围是[0,1], esp为补偿系数,γ为伽马系数。

当伽马系数大于1时,图像高灰度区域得到增强。

当伽马系数小于1时,图像低灰度区域得到增强。

当伽马系数等于1时,图像线性变换。

947a2e670e8f512cf23d75ea1b6d4ad5.png

4)图像取反

方法1:直接取反

imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';

img1= imread(imgPath); %前景图

img0= 255-img1; %取反景图

subplot(1,2,1),imshow(img1),title('原始图像');

subplot(1,2,2),imshow(img0),title('取反图像');

00a620c57f76f135d56925d85bf71d63.png

方法2:伽马变换

Matlab:imadjust(f, [low_in, high_in], [low_out, high_out], gamma)

[low_in, high_in]范围内的数据映射到 [low_out, high_out],低于low的映射到low_out, 高于high的映射到high_out.

imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';

img1= imread(imgPath); %前景图

img0= imadjust(img1, [0,1], [1,0]);

subplot(1,2,1),imshow(img1),title('原始图像');

subplot(1,2,2),imshow(img0),title('取反图像');

6c989c45b810fb36a8390389b79ba7b1.png

2、二值化

1)rgb2gray

一般保存的灰度图是24位的灰度,如果改为8bit灰度图。则可以用rgb2gray函数。

img= rgb2gray(img);

2)Matlab使用比较运算符二值化

imgPath = 'E:\opencv_pic\src_pic\pic4.bmp';

img= imread(imgPath); %前景图

img=rgb2gray(img);

img1= img > 60;

img2= img > 120;

img3= img > 180;

subplot(2,2,1),imshow(img), title('原始图像');

subplot(2,2,2),imshow(img1),title('阈值60');

subplot(2,2,3),imshow(img2),title('阈值120');

subplot(2,2,4),imshow(img3),title('阈值180');

cf3801e5c02b83f9eb945d7671b501cd.png

3)imshow参数指定图像灰度范围

imshow函数显示图片时,可以指定灰度等级。

imshow(img, [100,150])

小于100的直接设置为黑色,大于150的直接设置为白色。二者之间的设置为中等亮度。

imshow(img, [100,101])就可以实现二值化,图像分界线在100。

imgPath = 'E:\opencv_pic\src_pic\pic4.bmp';

img=imread(imgPath);

img=rgb2gray(img);

subplot(2,2,1),imshow(img), title('原始图像');

subplot(2,2,2),imshow(img,[50,100]),title('阈值50-100');

subplot(2,2,3),imshow(img, [100, 150]),title('阈值100-150');

subplot(2,2,4),imshow(img,[200,255]),title('阈值200-255');

bcca187f529a8110b975dd92946771fd.png

3、灰度直方图

灰度直方图:横坐标是灰度,纵坐标是该灰度在图像中出现的次数。

归一化直方图,纵坐标对应着该灰度级别在图像中出现的概率。

subplot(1,2,1),imshow(img), title('原始图像');

subplot(1,2,2),imhist(img),title('直方图');

02ad4e91298b46deefdccfdf496f0e99.png

绘制归一化直方图。

subplot(1,2,1),imshow(img), title('原始图像');

subplot(1,2,2),p = imhist(img)/numel(img) ;

plot(p), title('归一化直方图');

004bb0089f8ca0c67316f30925de9eb8.png

或者使用stem函数绘制归一化直方图。

subplot(1,2,1),imshow(img), title('原始图像');

[count,x]=imhist(img);

[m,n]=size(img);

count= count/(m*n);

subplot(1,2,2), stem(x, count) , title('归一化直方图');

27b587dd1b73984323409acd46b1c50a.png

img = img > 100;

subplot(1,2,1),imshow(img), title('原始图像');

subplot(1,2,2),imhist(img), title('直方图');

把图片转换为二值化图像,直方图如下。灰度只有0和1,符合二值化图的特点。

815ae8e89986d132740e35e3a3f4d3c5.png

对这个直方图归一化,因为是二值化的图,所以归一化后就是个子的比例。

p = imhist(img)/numel(img)

p =

0.6980

0.3020

Imhist(img,b); 可以指定灰度等级b,默认是256级,实际工程中一般32级,如下图。

b8684eb5bc7babade220b3dcd88e01e3.png

4、直方图均衡化

直方图均衡化即灰度均衡化,通过灰度映射,使输入图像的灰度转换为在每一级灰度上都有近似相同的点数分布,这样输出的直方图就是均匀的,图像获得较高的对比度和较大的动态范围。

直方图均衡化对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。使用直方图均衡化技术来处理图像,能扩展图像的动态范围,扩宽灰度等级范围,提高对比度。

histeq(img,b);%b是灰度等级。2级均衡化就是二值化。

subplot(1,4,1),imshow(img), title('原始图像');

subplot(1,4,2),histeq(img, 2), title('2级直方图均衡化');

subplot(1,4,3),histeq(img, 32), title('32级直方图均衡化');

subplot(1,4,4),histeq(img), title('255级直方图均衡化');

d720829234843c0f94839e6ebb8b80fc.png

可见直方图均衡化之后,图像亮度变得均匀,提高了对比度。

调用img=img*0.3;调暗了图像,再次均衡化,图像的效果没有发生改变,可见均衡化可以用作图像处理前把图像转为统一的形式。

90e4993dbb8a5ddc405a8ecccd30a75d.png

下图是imhist(img)之后的直方图。可见histeq将图划分灰度等级获得比较均匀平坦的直方图。

subplot(1,4,1),imshow(img), title('原始图像');

subplot(1,4,2),imhist(img), title('原图直方图');

subplot(1,4,3),imshow(histeq(img)), title('降低亮度图后直方图均衡化');

subplot(1,4,4),imhist(histeq(img)), title('降低亮度直方图均衡化');

d7df0a7c54db6e2bf388f675407b01bc.png

再举一个例子,直方图均衡化调整较暗的图片。

图片较暗,动态范围低。直方图灰度等级偏暗,在高亮度区域分配像素很少。

d90504eb89294e26f4d827ae11133031.png

使用均衡化处理,然后显示,直方图各个灰度等级的数据较均匀。

g=histeq(img, 256);

imshow(g)

c8a84218bd6a712646637e3131bfbbc6.png

原文出处:https://www.cnblogs.com/pingwen/p/12248360.html

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

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

相关文章

blender怎么移动骨骼,Blender学习笔记-(015)创建骨骼绑定及权重绘制操作详解

骨骼创建绑定具体操作如下:1: 【ShiftA】创建基础骨骼。(也可以通过打开Blender的插件Rigging:Rigify,生成自定义骨骼)2:点击骨骼,按【Tab】键进入编辑模式,选中创建骨骼端,按【E】拖…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识,并落实到实际场景(增量同步数据搜索) 对基础知识不感兴趣的,可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

从硬核科幻小说《三体》中看嵌入式

1 2 3 4 5 6 7 8 9 转载于:https://www.cnblogs.com/OleNet/p/3352189.html

php快速排序和二分查找法,二分查找及快速排序

小朋友二分查找和快速排序思想上有很大的相似度,就是做一个起始点,开始往左右做动作,也同样是由递归实现,当然也可以不用递归实现。但是我觉得也不能用php内置特有的函数- -,我找了很多php的快速排序,几乎都…

extractCSS – 帮助你从 HTML 中快速分离出 CSS

extractCSS 是一个免费的基于 Web 的应用程序,能够从 HTML 中提取风格相关的信息,包括 id、class 和内联样式,而且输出可以定制(缩进和括号的用法)。该工具非常有用,当我们快速创建一个使用了内联样式的 HT…

php项目安装器,php项目安装器程序源码,php通用安装程序

php项目安装器程序源码,php通用安装程序一个安装器的源码,最简单的看一下emlog 也可以!文件目录结构index.php 程序首页│ ├─conf 安装后配置文件目录├─data    目录写入测试目录└─install 安装程序目录 │ index.php   安装程…

Python开发环境Wing IDE 5.0测试第八版发布

Wing IDE是著名的Python开发工具,是Wingware公司的主要产品。从1999年起,Wingware公司便开始专注于Python开发设计。Wing IDE在十几年的发展中,不管完善。其强大设计理念包括:编辑工具丰富,编译测试版权一体化&#xf…

WPF自定义控件 —— 装饰器

摘自:http://www.cnblogs.com/Curry/archive/2009/09/16/1567757.html 顾名思义就是装饰用的,也就是说不改变原有的控件结构,但可以为控件添加一些新的功能,或是为控件的显示外观增加些东西。如MSDN中的例子: 本来Text…

Netty Associated -- ByteBuf

ByteBuf ByteBuf是Netty的Server与Client之间通信的数据传输载体.他提供了一个byte数组(byte[])的抽象视图 buffer创建 我们推荐通过一个Unpooled的帮助方法来创建新的buffer而不是通过调用独立的构造器来创建 随机访问索引 就像普通的原声字节数组一样, ByteBuf使用零基坐标(z…

php 根号2计算过程,根号2以及π的计算--关于无理数的畅想

[导读]这两篇文章里,我发现不需要那些老师教的范式也能很好地理解那些现代概念,并且理解的更深刻。这两篇文章里,我发现不需要那些老师教的范式也能很好地理解那些现代概念,并且理解的更深刻。我一般假设自己从来没有学过微积分&a…

任务分配与时间估计

各成员的任务分配与时间估计如下: 项目所需总时间为: 转载于:https://www.cnblogs.com/buaa-smile/p/3383374.html

linux所有用户无法登录用户名和密码错误,为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。...

为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。关注:121 答案:6 mip版解决时间 2021-02-04 23:27提问者删除记忆里的你2021-02-04 04:27最佳答案二级知识专家那年夏天2021-02-04 05:19用户名肯定是root&#x…

linux spring mvc tomcat配置,Spring MVC配置详解

一、Spring MVC处理流程1.Spring MVC将所有请求都交由DispatchServlet进行处理。2.DispatchServlet获取HandlerMapping(处理映射器),然后找到对应的HandlerBean处理Controller请求,并返回一个ModelAndView对象。3.DispatchServlet查询一个或多个ViewReso…

如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行

NCL基础讲解(二)——NCL安装与运行兰溪之水2015-11-04上一期已经给大家简单介绍了NCL的基本情况,既然NCL在科学数据分析和可视化方面有那么多优点,那还等什么,让我们一起“用”起来吧!这一期给大家介绍NCL的安装与运行。关于NCL的…

C#值类型和引用类型的不同

1 C#中有两种类型: 值类型和引用类型: 值类型的变量直接包含他们的数据,引用类型存储对他们的数据的引用,后者称为对象: 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2…