灰度变换

灰度变换函数 s = T(r)   其中r为输入图像在(x, y)点处的灰度值,s为输出图像在(x, y)点处的灰度值

灰度变换的作用

上图所示的两幅T(s)函数的图像曲线,第一幅图可以增强图像对比度,第二幅图可以对图像进行二值化处理

灰度变换函数

反转函数

 void reverse(short** in_array, short** out_array, long height, long width)
{
for (int i = ; i < height; i++){
for (int j = ; j <width; j++)
out_array[i][j] = GRAY_LEVELS - in_array[i][j];
}
}

最简单的灰度变换函数,将图像中的每个像素点处的颜色值反转,对于8位灰度图片,用255减去原灰度值

原图

反转图

对数变换

s = clog(1 + r)  c为常数,本次测试中c取10

 void logarithm(short** in_array, short** out_array, long height, long width)
{
for (int i = ; i < height; i++){
for (int j = ; j <width; j++)
out_array[i][j] = (short)( * log(( + in_array[i][j])));
}
}

可以看出,对数变换降低了图像的对比度

幂律(伽马)变换

s = crγ  其中 c 和 γ 为正常数

其中γ<1时,降低对比度,γ>1时,提高对比度

γ = 1.2

 void gamma(short** in_array, short** out_array, long height, long width)
{
for (int i = ; i < height; i++){
for (int j = ; j <width; j++)
out_array[i][j] = (short)pow(in_array[i][j], 1.2);
}
}

直方图均衡化

直方图为离散函数h(rk) = nk, 其中rk是第k级灰度值,nk是图像中h灰度为rk的像素个数

现在给出上面几幅图像的直方图

可以明显看出,对比度越高的图像,直方图的分布越均衡,因此直方图均衡化算法可以显著提高图像对比度

直方图均衡化算法推导(需一定高等数学及概率论知识)

算法实现

 void calculate_histogram(long height, long width, short **image, unsigned long histogram[])
{
short k;
for(int i=; i < height; i++){
for(int j=; j < width; j++){
k = image[i][j];
histogram[k] = histogram[k] + ;
}
}
} void histogram_equalization(short** in_array, short** out_array, long height, long width)
{
unsigned long sum, sum_of_h[GRAY_LEVELS];
double constant;
unsigned long histogram[GRAY_LEVELS] = {}; calculate_histogram(height, width, in_array, histogram);
sum = ;
for(int i=; i < GRAY_LEVELS; i++){
sum = sum + histogram[i];
sum_of_h[i] = sum;
} constant = (double)(GRAY_LEVELS)/(double)(height*width);
for(int i = , k = ; i < height; i++){
for(int j = ; j < width; j++){
k = in_array[i][j];
out_array[i][j] = sum_of_h[k] * constant;
}
}
}

c语言数字图像处理(四):灰度变换的更多相关文章

  1. c语言数字图像处理(三):仿射变换

    仿射变换及坐标变换公式 几何变换改进图像中像素间的空间关系.这些变换通常称为橡皮模变换,因为它们可看成是在一块橡皮模上印刷一幅图像,然后根据预定的一组规则拉伸该薄膜.在数字图像处理中,几何变换由两个基 ...

  2. c语言数字图像处理(九):边缘检测

    背景知识 边缘像素是图像中灰度突变的像素,而边缘是连接边缘像素的集合.边缘检测是设计用来检测边缘像素的局部图像处理方法. 孤立点检测 使用<https://www.cnblogs.com/Gol ...

  3. c语言数字图像处理(一):bmp图片格式及灰度图片转换

    本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...

  4. c语言数字图像处理(二):图片放大与缩小-双线性内插法

    图像内插 假设一幅大小为500 * 500的图像扩大1.5倍到750 * 750,创建一个750 * 750 的网格,使其与原图像间隔相同,然后缩小至原图大小,在原图中寻找最接近的像素(或周围的像素) ...

  5. c语言数字图像处理(十):阈值处理

    定义 全局阈值处理 假设某一副灰度图有如下的直方图,该图像由暗色背景下的较亮物体组成,从背景中提取这一物体时,将阈值T作为分割点,分割后的图像g(x, y)由下述公式给出,称为全局阈值处理 多阈值处理 ...

  6. c语言数字图像处理(八):噪声模型及均值滤波器

    图像退化/复原过程模型 高斯噪声 PDF(概率密度函数) 生成高斯随机数序列 算法可参考<http://www.doc.ic.ac.uk/~wl/papers/07/csur07dt.pdf&g ...

  7. c语言数字图像处理(七):频率域滤波

    代码运行了两个小时才出的结果,懒得测试了,这一部分先鸽了,等对DFT算法进行优化后再更

  8. c语言数字图像处理(六):二维离散傅里叶变换

    基础知识 复数表示 C = R + jI 极坐标:C = |C|(cosθ + jsinθ) 欧拉公式:C = |C|ejθ 有关更多的时域与复频域的知识可以学习复变函数与积分变换,本篇文章只给出DF ...

  9. c语言数字图像处理(五):空间滤波

    空间滤波原理 使用大小为m*n的滤波器对大小为M*N的图像进行线性空间滤波,将滤波器模板乘以图像中对应灰度值,相加得模板中心灰度值 a = (m-1)/2, b = (n-1)/2 若f(x+s, y ...

随机推荐

  1. 开发一个shopify插件

       开发一个shopify插件,shopify商城可以安装该插件:当用户在商城下单后,插件把订单数据按照指定格式传给disruptsports服务器:   https://help.shopify. ...

  2. Django之模板配置(template)

    Django模板系统 官方文档 jinja2模块中文 jinja2模块官方 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Djan ...

  3. JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    1.内存区域划分 根据我们之前介绍的垃圾收集算法,限定商用虚拟机基本都采用分代收集算法进行垃圾回收.根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法.大批对象死去.少量 ...

  4. 用python解析word文件(三):style

    太长了,我决定还是拆开三篇写.   (一)段落篇(paragraph) (二)表格篇(table) (三)样式篇(style)(本篇) 选你所需即可.下面开始正文. 在前两篇中,我们已经解析出了par ...

  5. Jupyter Notebook的使用

    命令模式 (按键 Esc 开启) Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本单元,在其下插 ...

  6. swift的enum基础

    其它语言的枚举: 符号化的整型常量的集合: swift的枚举: 可以是任何基础类型和无类型: If you are familiar with C, you will know that C enum ...

  7. 初识Qt简单动画

    Qt提供了类QPropertyAnimation来实现图片的一些简单的动画操作效果. 1.新建一个Qt空项目,同时添加资源文件,并在资源文件中添加图片路径.之后在main.cpp函数中添加以下代码 # ...

  8. 利用java代码生成keyStore

    在前面的章节中介绍了如何利用KeyTool工具生成keyStore:传送门. 但是很多时候,在javaWeb项目中,比如给每个用户加上独特的数字签名,那么我们需要在创建用户的时候,给其生成独一无二的k ...

  9. HDU 1025 LIS二分优化

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...

  10. 搞定flex布局

    这几种方式的搭配使用可以轻松搞定 PC 端页面的常见需求,比如实现水平居中可以使用 margin: 0 auto,实现水平垂直同时居中可以如下设置: .dad { position: relative ...