-
概述
图像处理运算可以分为点运算、代数运算、逻辑运算和几何运算
-
点运算
直接对每个像素点的灰度值按照一定关系进行运算,有规律改变像素点的灰度值,可用于提升图像的对比度,起放大图像细节的效果。
- 线性点运算
函数形式:
s代表输入图像像素值,a运算系数,b为常数
(1) 如果a=1且b=0,则t=s,即输入图像与输出图像相同。如果a=1且b≠0,则输出图像的灰度值上移或下移,整个图像在显示会更亮或更暗。
(2)如果a>1,则输出图像对比度增大,输出图像显示效果较输入图像会更亮。(图像的灰度值变大,图像更亮)
(3)如果a<1,则输出图像对比度降低,输出图像显示效果较输入图像会更暗。
(4)如果a<0,即a为负值,则原输入图像的暗区域将变亮,亮区域将变暗。
参考代码:
import cv2 as cv import matplotlib.pyplot as plt image = cv.imread(' --------') # 读取输入图像 image2 = image / 255 # 输入换成double类型 # 如果输入图像是unit8,unit16或者是二值的logical类型,则函数im2double将其值归一化到0~1之间。 a = 2.5 b = -70 J = a * image2 + b / 255 # 增加对比度 c = 0.7 d = -30 K = c * image2 + d / 255 # 减小对比度 e = 1 f = 70 L = e * image2 + f / 255 # 线性增加亮度 g = -1 h = 255 P = g * image2 + h / 255 # 图像反色 cv.imshow('原图像', image2) cv.imshow('增加对比度', J) cv.imshow('减小对比度', K) cv.imshow('线性平移增加亮度', L) cv.imshow('图像反色', P) cv.waitKey()
- 非线性点运算
1.对数变换 函数形式:
c为尺度比例常数,s为输入图像灰度值,t为变换后的输出图像灰度值。
观察图像可知此变换对于灰度值小的点斜率很高,灰度值大的点斜率很低,可以应用与将图想暗区域变亮,扩展被压缩的较暗像素。(参考代码对应图片一起放指数变换下面了)
2.指数变换 (伽马变换) 函数形式:
(1)当γ <1时,效果和对数变换相似,放大暗处细节,压缩亮处细节,随着数值减少,效果越强。
(2)当γ >1时,放大亮处细节,压缩暗处细节,随着数值增大,效果越强。 (3)当γ =1时,t = cs,这操作的得到的输出图像是线性的。
指数变换参考代码:
import cv2 as cv import numpy as np # 伽马变换增强对比度 in_image = cv.imread('E:/image/firework.jpg', cv.IMREAD_GRAYSCALE) # 图像归一化(压缩BGR范围到0至1) fI = in_image / 255.0 # 伽马变化 gamma = 0.1 out_image = np.power(fI, gamma) # 显示原图和伽马变化后的效果 cv.imshow('IN', in_image) cv.imshow('OUT', out_image) cv.waitKey(0) cv.destroyAllWindows()
由图像可知γ = 0.1和知数变换类似,但由于我选的γ值过小效果更加明显,可见原图像(右图)的更加暗区域清晰,当γ = 3反之。
γ = 3 γ = 0.1 对数变换参考代码:由图像可以知道通过对数运算后,天空部分(暗部分)更加清晰,烟花(亮部分)被弱化了
import cv2 as cv import copy import math # 以灰度图形式读入原始图像 img = cv.imread('E:/image/firework.jpg', 0) # 对数变换 log = copy.deepcopy(img) rows = img.shape[0] cols = img.shape[1] for i in range(rows): for j in range(cols): log[i][j] = 10 * math.log(1 + log[i][j]) # 通过窗口展示图片 第一个参数为窗口名 第二个为读取的图片变量 cv.imshow('log', log) # 变换后的图片生成新文件并保存 cv.imwrite('E:/image/firework2.jpg', log) cv.waitKey(0) cv.destroyAllWindows()
原图像 灰度图 标题对数变换后
-
代数运算
主要应用:消除或降低加性噪声(图像增强),图案,检测两副图像之间的变化,检测物体的运动等。
-
加法运算 数学表达式S(x,y)=A(x,y)+B(x,y)
实现两幅图像的叠加效果和平均值降噪 (同一图像多次相加求平均) 图像叠加参考代码: 图像平均值降噪参考代码: -
减法运算
乘法运算
除法运算
-
逻辑运算
-
几何运算