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,一经查实,立即删除!

相关文章

Delphi XE2 之 FireMonkey 入门(13) - 动画(下)

TAnimation 类的主要成员: protectedfunction NormalizedTime: Single; //procedure ProcessAnimation; virtual; //其子类们主要通过覆盖此方法来实现不同的动画procedure Loaded; override; // publicprocedure Start; virtual; //播放procedure…

mysql 触发器 插入或者更新,MySQL 在触发器里中断记录的插入或更新?

下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。mysql> create table t_control(id int primary key);Query OK, 0 rows affected (0.11 sec)mysql> insert into t_control values (1);Query OK, 1 row affected (0.05 sec)mysql&g…

BZOJ 1601 [Usaco2008 Oct]灌水 (最小生成树)

题意 Farmer John已经决定把水灌到他的n(1<n<300)块农田&#xff0c;农田被数字1到n标记。把一块土地进行灌水有两种方法&#xff0c;从其他农田饮水&#xff0c;或者这块土地建造水库。 建造一个水库需要花费Wi(1<Wi<100000),连接两块土地需要花费Pij(1<pij<…

matlab mxarray array,[Matlab]MxArray与MwArray使用区别

引子在外部编程语言与matlab的交互中&#xff0c;Array是最单元的交互元素&#xff0c;怎么都绕不过去。在matlab提供的Array接口有两个&#xff0c;一个是C的MxArray, 另一个是Cpp(C)的MwArray.看下两着的分别介绍&#xff1a;mxArray&#xff1a;Matlab C 函数库的结构体mwAr…

NSARRAY的 内存管理

一个对象加入到nsarray里内存计数器会1,当这个nsarrayrelease的时候,回自动减1,程序员不需要管理这方面的内存.转载于:https://www.cnblogs.com/gm-lotus/p/3349509.html

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

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

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

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

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

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

matlab潮流计算求节点自导纳,大神们,求个电力系统潮流计算的matlab程序。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼ninput(Please input n\n); %n表示系统的节点数d0input(Please input d0\n); %d0表示系统的误差minput(Please inpit m\n); %m表示系统的pq节点的个数p0ones(n-1,1);q0ones(m,1);d1;dpvones(n-1,1);dqvones(m,1);dpzeros(n-1,1);dq…

早晨爬山,三餐自备——程序员也可以这样生活、工作

没有参加工作以前&#xff0c;在香港及国外的电影里经常会有在家吃了自做早餐后再悠闲的去上班的情节&#xff0c;当时充满了向往。 从事程序开发以来&#xff0c;电脑前坐12个小时是常态&#xff0c;坐14个小时不稀奇&#xff0c;坐14个小时以上十有一二。而早餐&#xff1f;经…

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

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

php 三目格式,PHP-您使用哪种编码风格的三元运算符?

PHP-您使用哪种编码风格的三元运算符&#xff1f;如果很短&#xff0c;我将其放在一行中。 最近&#xff0c;我一直在将这种样式用于较长或嵌套的三元运算符表达式。 一个人为的例子&#xff1a;$value ( $a $b )? true value # 1: ( $a $c )? true value # 2: false valu…

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

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

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

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

7zip File: How to Uncompress 7z files on Ubuntu, Debian, Fedora

转&#xff1a;http://www.thegeekstuff.com/2010/04/7z-7zip-7za-file-compression/ Question: How do I uncompress a *.7z file ( 7zip file ) in UNIX / Linux ? Can you explain with a simple example? Answer: Use 7za command to unzip a 7z file ( 7zip file ) on U…

php找不到邮件类,SMTP无法使用php邮件程序类

我有两个帐户&#xff1a;no-replyweddinggrabs.comno-replyappovio.com和传入POP3&#xff1a;pop.secureserver.net(995)传出SMTP&#xff1a;smtpout.secureserver.net(80,3535,25,465)这些工作使用电子邮件客户端,如Thunderbird,post-box等,但不使用php-mailer&#xff1a;…

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

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

PHP5比PHP4,php4和php5的配置异同比较

技术文章配置php4或者php5的过程中&#xff0c;php4&#xff0c;5的配置的步骤大致一样的&#xff0c;但是配置内容有一些差别。在LINUX等环境下编译&#xff0c;一般来说&#xff0c;只要编译的选项正确&#xff0c;配置也就正确了&#xff1b;在windows配置则需要注意以下不同…