java图像灰度直方图_图像灰度变换、二值化、直方图
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时,图像线性变换。
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('取反图像');
方法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('取反图像');
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');
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');
3、灰度直方图
灰度直方图:横坐标是灰度,纵坐标是该灰度在图像中出现的次数。
归一化直方图,纵坐标对应着该灰度级别在图像中出现的概率。
subplot(1,2,1),imshow(img), title('原始图像');
subplot(1,2,2),imhist(img),title('直方图');
绘制归一化直方图。
subplot(1,2,1),imshow(img), title('原始图像');
subplot(1,2,2),p = imhist(img)/numel(img) ;
plot(p), title('归一化直方图');
或者使用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('归一化直方图');
img = img > 100;
subplot(1,2,1),imshow(img), title('原始图像');
subplot(1,2,2),imhist(img), title('直方图');
把图片转换为二值化图像,直方图如下。灰度只有0和1,符合二值化图的特点。
对这个直方图归一化,因为是二值化的图,所以归一化后就是个子的比例。
p = imhist(img)/numel(img)
p =
0.6980
0.3020
Imhist(img,b); 可以指定灰度等级b,默认是256级,实际工程中一般32级,如下图。
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级直方图均衡化');
可见直方图均衡化之后,图像亮度变得均匀,提高了对比度。
调用img=img*0.3;调暗了图像,再次均衡化,图像的效果没有发生改变,可见均衡化可以用作图像处理前把图像转为统一的形式。
下图是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('降低亮度直方图均衡化');
再举一个例子,直方图均衡化调整较暗的图片。
图片较暗,动态范围低。直方图灰度等级偏暗,在高亮度区域分配像素很少。
使用均衡化处理,然后显示,直方图各个灰度等级的数据较均匀。
g=histeq(img, 256);
imshow(g)
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[图像灰度变换、二值化、直方图]http://www.zyiz.net/tech/detail-103086.html
java图像灰度直方图_图像灰度变换、二值化、直方图相关推荐
- python批量修改图像像素,修改命名,二值化,划分数据集
目录 修改命名 批量修改文件夹下面所有图片的像素 批量二值化 修改命名 是直接在源文件夹下面修改的 所以记得提前复制下文件再 处理. #-----------------------------批量重 ...
- java用opencv实现滤镜_opencv滤镜-二值化实现黑白滤镜
黑白滤镜 黑白滤镜非常简单,顾名思义就是图像只有黑色与白色,这实际上就是图像的二值化.实现的原理也非常地简单,设定一个阈值,假设为128,判断每个像素点的灰度值,大于128设为255(对应白色),小于 ...
- otsu阈值分割算法原理_大津二值化算法OTSU的理解
otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...
- opencv python matplotlib.pyplot.hist() 如何绘制灰度直方图,如何根据灰度直方图确定最优二值化值
什么是灰度直方图? 图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析.不过图像的直方图不具有空间特征. 图像的灰度直方图(histogram),就是将图像转化成灰度 ...
- 【医学图像处理】 2 灰度直方图、图像二值化(阈值分割)
文章目录 1 灰度直方图 1.1 直方图理解 1.2 直方图计算 1.3 直方图均衡化 1.3.1 全局均衡化 1.3.2 自适应(局部)均值化 2 图像二值化(阈值分割) 2.1 二值化理解 2.2 ...
- 小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
文章目录 解剖图像 图像处理基本原理 RGB模型 灰度 二值化 图像失真问题 从本节开始,我就要正式踏上小白的计算机视觉探索之路,先从图像基础学习吧 解剖图像 要学会图像处理首先就得知道图像的结构,平 ...
- 图像的二值化和灰度化
图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果. 将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和 ...
- 数字图像处理:图像平均/加法_OPT小讲堂 ∣ SciSmart图像增强之二值化
图像二值化(Image Binarization)简单理解就是通过适当的高低阈值将256个亮度等级的图像转换为二值图.本文中提及的二值图像均指灰度值为0(黑色)或255(白色)的图像. 在数字图像处理 ...
- 图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)
图像二值化(Image Binarization):平均值法.双峰法.大津算法(OTSU) 编程实现图像的二值化,分析不同的阈值对二值化图像的影响. 问题描述 传统的机器视觉通常包括两个步骤:预处理和 ...
最新文章
- 安装NUC972的BSP
- 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)
- 第2天:Ansible-Inventory管理
- Java+XML+MVC框架StrutsCX简介[转]
- php静态数组变量初始化,为什么数组初始化时,赋值不能是常量?
- python 多进程multiprocessing 模块
- 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
- 《Unix环境高级编程》学习笔记
- Winscp指向putty.exe,文件用notepad++打开
- 惠普z800工作站bios设置_HP工作站 BIOS说明 适用Z228 Z440 Z230 Z640 Z840 Z800 Z620 Z420 Z820主板设置 -...
- 关于编程中变量的定义
- SpringBoot2.1.9 多MongoDB配置template
- 集合addAll方法使用存在的问题。
- 看不到同一个网络下的其他计算机,看不到局域网其他计算机怎么办
- 进销存仓库管理系统:规范数据、流程与管理
- Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
- 利用Filezilla在局域网内搭建自己的FTP服务器
- linux下Nginx的卸载、安装
- 大学电路题目怎么搜_电路,中国大学MOOC(慕课)答案公众号搜题
- js实现全屏与退出全屏,解决F11进入全屏后退出全屏API方法失效(chrome)