用pyqt5制作图像处理界面(3)——灰度变换

图像处理分为空间域和频率域,空间域是指图像平面本身,主要是直接以图像中的像素操作为基础进行图像处理,空间域的处理主要分为灰度变换和空间滤波两类,灰度变换在图像单个像素上操作,主要以对比度和阈值处理为目的。空间滤波涉及改善性能的操作,通过像元领域来处理。本文主要介绍灰度变换在图像增强方面的应用,使得输出的图像比原始图像更适合特定需求的一种处理。

灰度线性变换

图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的。灰度映射通常是用灰度变换曲线来进行表示。通常来说,它是将图像的像素值通过指定的线性函数进行变换,以此来增强或者来减弱图像的灰度,灰度线性变换的函数就是常见的线性函数。
g(x, y) = k · f(x, y) + d
设源图像的灰度值为x,则进行灰度线性变换后的灰度值为y = kx + b (0<=y<=255),下面分别来讨论k的取值变化时线性变换的不同效果

(1).|k|>1时
当k>1时,经过这种变换后,图像的整体对比度明显增大,在灰度图中的体现就是变换后的灰度图明显被拉伸了。

(2).|k|=1时
当k=1时,这种情况下常用来调节图像的亮度,亮度的调节就是让图像的各个像素值都增加或是减少一定量。在这种情况下可以通过改变d值来达到增加或者是减少图像亮度的目的。因为当k=1,只改变d值时,只有图像的亮度被改变了,d>0时,变换曲线整体发生上移,图像的亮度增加,对应的直方图整体向右侧移动,d<0时,变换曲线整体下移,图像的亮度降低,对应的直方图发生水平左移。

(3).0<|k|<1时
此时变换的效果正好与k>1时相反,即图像的整体对比度和效果都被削减了,对应的直方图会被集中在一段区域上。k值越小,图像的灰度分布也就越窄,图像看起来也就显得越是灰暗。

(4).k<0时
在这种情况下,源图像的灰度会发生反转,也就是原图像中较亮的区域会变暗,而较暗的区域将会变量。特别的,此时我们令k = -1,d = 255,可以令图像实现完全反转的效果。对应的直方图也会发生相应的变化。
代码如下:

#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
 
using namespace std;
using namespace cv;
 
int main()
{
	Mat srcImg = imread("c05/1.jpg");
	if (!srcImg.data)
	{
		cout << "读入图片失败" << endl;
		return -1;
	}
	imshow("原图像", srcImg);
	double k, b;
	cout << "请输入k和b值:";
	cin >> k >> b;
	int RowsNum = srcImg.rows;
	int ColsNum = srcImg.cols;
	Mat dstImg(srcImg.size(), srcImg.type());
	//进行遍历图像像素,对每个像素进行相应的线性变换
	for (int i = 0; i < RowsNum; i++)
	{
		for (int j = 0; j < ColsNum; j++)
		{
			//c为遍历图像的三个通道
			for (int c = 0; c < 3; c++)
			{
				//使用at操作符,防止越界
				dstImg.at<Vec3b>(i, j)[c] = saturate_cast<uchar>
					(k* (srcImg.at<Vec3b>(i, j)[c]) + b);
			}
		}
	}
	imshow("线性变换后的图像", dstImg);
	waitKey(0);
	return 0;
}

灰度对数变换

对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的。变换方法由下式给出。
在这里插入图片描述
对数变换目前我知道的有两个作用:

①因为对数曲线在像素值较低的区域斜率较大,像素值较高的区域斜率比较低,所以图像经过对数变换之后,在较暗的区域对比度将得到提升,因而能增强图像暗部的细节。

②图像的傅里叶频谱其动态范围可能宽达0~10^6。直接显示频谱的话显示设备的动态范围往往不能满足要求,这个时候就需要使用对数变换,使得傅里叶频谱的动态范围被合理地非线性压缩。
在这里插入图片描述

灰度幂次变换与Gamma校正

又叫伽玛校正,和对数变换的原理差不多,不多说了,只是参数多了一个,可变宽带的输入像素值范围可选了,把低值带拉伸还是把高值拉伸要看伽马的设定了。
表达式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个是伽马等于4,一个是伽马等于0.2;一个拉伸高像素值的范围,一个拉伸低像素值的范围。哪部分的斜率越大,哪部分的拉伸比例就越大。

在这里插入图片描述

分段线性变换

通过分段线性函数我们可以将我们感兴趣的灰度值突显出来
通过分段函数来输出不同程度的灰度级扩展,从而来影响输出图像的对比度。
在这里插入图片描述
其变换公式为:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值