图像灰度变换、二值化、直方图

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)

尊重原创技术文章,转载请注明。

https://www.cnblogs.com/pingwen/p/12248360.html

原文地址:https://www.cnblogs.com/pingwen/p/12248360.html

时间: 2024-11-02 15:13:36

图像灰度变换、二值化、直方图的相关文章

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

OpenCV图像的二值化

图像的二值化: 与边缘检测相比,轮廓检测有时能更好的反映图像的内容.而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓. 下面就介绍OpenCV中对图像进行二值化的关键函数——cvThreshold(). 函数功能:采用Canny方法对图像进行边缘检测函数原型:void cvThreshold( 

OpenCV中对图像进行二值化的关键函数——cvThreshold()。

函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数说明: 第一个参数表示输入图像,必须为单通道灰度图. 第二个参数表示输出的边缘图像,为单通道黑白图. 第三个参数表示阈值 第四个参数表示最大值. 第五个参数表示运算方法. 在OpenCV的imgproc\types_c.h中

【OpenCV入门指南】第四篇 图像的二值化

[OpenCV入门指南]第四篇 图像的二值化 在上一篇<[OpenCV入门指南]第三篇Canny边缘检测>中介绍了使用Canny算子对图像进行边缘检测.与边缘检测相比,轮廓检测有时能更好的反映图像的内容.而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓. <OpenCV入门指南>系

图像的二值化

#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; Mat src, dst,dst2,gray_src; char* INPUT_WIN = "input image"; char* output_title = "binary image"; int thresh

python-opencv 图像二值化,自适应阈值处理

定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群.这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization). 简单的阈值-(全局阈值): Python-OpenCV中提供了阈值(threshold)函数: cv2.threshold() 函数:

c#图像灰度化、灰度反转、二值化

图像灰度化:将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围.而灰度图像是R.G.B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些.灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征.图像的灰度

一种超级快速的图像二值化技术

在计算机视觉中,对图像进行二值化恐怕是最常见的操作了.为了检测目标,可能需要对每一帧图像的每一个像素点进行运算.如果能提升二值化的速度,那么,你的算法的效率就会大大的提高.本文,将介绍一种超级快速的图像二值化技术. 要解决的问题: 如上图所示,需要把彩色图像中, (1) R通道介于(smoevalue1, somevalue2)(2) G通道介于(somevalue3, somevalue4)(3) B通道介于(somevalue5, somevalue6)当图像中某个像素点同时满足上面3个条件

图像 - 灰度化、灰度反转、二值化

原文地址:http://www.cnblogs.com/gdjlc/archive/2013/03/05/2943801.html 图像灰度化: 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围.而灰度图像是R.G.B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不