2018-10-17 11:02:37 weixin_35747666 阅读数 2539

在本章节中,将介绍几种常用的图像变换的方法,即利用数学公式将图像变换成另一种具有特定物理意义的图像,通过新的图像,我们可以观察出原图像的某些特性,且可以对原图像进行滤波、压缩等图像处理的操作,包括傅里叶变换、沃尔什变换等。

一、图像傅里叶变换基本原理与实现

傅里叶变换,是将时域信号转换为频域信号的变换方法,将时域信号分解为频率不同的正弦波信号的方法,也就是说,任何一个信号都是若干个正弦信号所叠加。通过傅里叶变换,我们就可以得到信号的频率特性,是高频成分多一点,还是低频成分多一点,每个成分的幅值和相位是多少(频谱图和相位图)。

图像是离散的二维信号,可以通过二维傅里叶变换实现到频域的转换,转换前的图像矩阵是由实数组成的,转换后的频域矩阵是复数阵,变换公式如下所示,x,yx,y是图像阵的坐标,u,vu,v是频域阵的坐标,两者没有一一对应的关系,频域阵中每一个点都是对图像阵中每一个像素点进行了运算的。

我们关注的是通过傅里叶变换获得图像的频谱图与相位图,计算方法如下,

     

接下来我们用python代码来实现傅里叶变换,得到图像的频谱图与相位图,实验图像是Lena。

计算频谱图的代码如下,

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylab
img = cv2.imread('Lena.jpg',0)
f = np.fft.fft2(img)	#傅里叶变换
fshift = np.fft.fftshift(f) 	#将零频点移到图像中央
s1 = np.log(np.abs(f))	 #先进行绝对值运算,然后取对数,限制数值范围
s2= np.log(np.abs(fshift))
plt.subplot(121),plt.imshow(s1,'gray'),plt.title('original')
plt.subplot(122),plt.imshow(s2,'gray'),plt.title('center')
pylab.show()

得到结果,第一幅图是原始傅里叶变换的结果,我们可以这样理解这幅图片,中心是高频部分,四周是低频部分,横轴是原图片横向方向的傅里叶频谱,纵向是原图片纵向方向的傅里叶频谱,为是频谱具有一致性与可观性,我们将零频点,也就是四个角上的点,移到频谱图的中心得到第二幅图,得到的频谱图中心是低频部分,四周是高频部分。图中高亮的点代表成分多的某一频率,灰暗的点代表成分少的某一频率。如果一幅图片高频部分多是高亮,代表图像尖锐,变化剧烈,边界分明且两边像素差距极大;反之,图片低频部分高亮,高频部分灰暗,代表图片平缓、柔和。
观察实验图像的频谱结果,中心点高亮,低频部分占据成分大,图片总体表现的平缓。

接下来我们来实现相位的部分,实现代码如下,

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylab
img = cv2.imread('Lena.jpg',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f) 
xw = np.angle(f);	#np.angle()函数求相位,arctan(虚部/实部)
xw_shift =np.angle(fshift)
plt.subplot(121),plt.imshow(xw,'gray'),plt.title('original')
plt.subplot(122),plt.imshow(xw_shift,'gray'),plt.title('center')
pylab.show()

得到结果,图中的点代表频谱图中对应频率的相位值。

二、图像傅里叶变换的应用

1、傅里叶变换在图像滤波中的应用
经过傅里叶变换后的图像中间部分为低频部分,越靠外频率越高,因此,我们可以选择所需要的高频或是低频进行滤波。高频反映图像中的细节,低频反映图像中的整体概貌。
低通滤波代码如下,

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylab

def LPF(img,radius = 50): 	#定义低通滤波函数,radius:低通半径,半径越小,低通效果越明显,图片越模糊
	rows,cols = img.shape
	mrows = int(rows/2)
	mcols = int(cols/2)
	mask = np.zeros((rows,cols),np.uint8)	#创建掩码
	mask[mrows-radius:mrows+radius,mcols-radius:mcols+radius] = 1
	return mask	
	
def main():
	img = cv2.imread('Lena.jpg',0)
	f = np.fft.fft2(img)
	fshift = np.fft.fftshift(f) 
	fshift = fshift*LPF(img) 	#低通滤波,即与掩码相乘,过滤掉频率高的部分
	#逆变换
	f_ishift = np.fft.ifftshift(fshift)
	img_back = np.fft.ifft2(f_ishift)
	img_back = np.abs(img_back)
	plt.imshow(img_back,'gray'),plt.title('radius=50')
	pylab.show()

if __name__=="__main__":
	main()

结果如下,

高通滤波代码如下,

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylab

def HPF(img,radius= 50): #高通滤波函数,radius:高通半径,半径越大,高通效果越明显,图片越尖锐
	rows,cols = img.shape
	mrows = int(rows/2)
	mcols = int(cols/2)
	mask = np.zeros((rows,cols),np.uint8)	#创建掩码
	mask[:,:] = 1
	mask[mrows-radius:mrows+radius,mcols-radius:mcols+radius] = 0
	return mask	

def main():
	img = cv2.imread('Lena.jpg',0)
	f = np.fft.fft2(img)
	fshift = np.fft.fftshift(f) 
	fshift = fshift*HPF(img,1) 	#高通滤波,即与掩码相乘,过滤掉频率高的部分
	#逆变换
	f_ishift = np.fft.ifftshift(fshift)	
	img_back = np.fft.ifft2(f_ishift)
	img_back = np.abs(img_back)
	plt.imshow(img_back,'gray'),plt.title('radius=50')
	pylab.show()
	
if __name__=="__main__":
	main()

结果如下,

对比结果可以发现,低通滤波让图片变得更加模糊,过滤掉了图片中边缘的、尖锐的部分;高通滤波让图片变得更加尖锐,过滤掉了图片中平缓的部分,留下边缘的、尖锐的部分。

2、傅里叶变换在图像压缩中的应用
原理很简单,将高频系数设置为0,压缩效果如下,

     

未完待续

2019-03-01 09:56:52 BIT_666 阅读数 397

1.定义

一幅图像定义为一个二维数组f(x,y),其中x,y是空间的平面坐标,而在任何一堆空间坐标x,y处的幅值f成为图像在该点的强度或灰度,每个元素都有一个特定的位置和幅值,这些元素称为像素。

 

2.图像处理分类

低级处理:输入,输出都是图像,例如降噪,对比度增强,图像锐化

中级处理:输入,输出都为图像特征,边缘,轮廓,物体标识

高级処理:输入为图像,输出涉及理解,识别目标总体

 

3.图像处理步骤

图像获取:包括图像预处理,例如图像缩放,截取等

图像增强:对一幅图进行某种操作,使其更适合处理应用

图像复原:改进图像外观的一个领域,一般基于图像退化的数学或概率为基础

图像压缩:减少图像存储量或降低图像带宽的处理

图像分割:对图像划分为他的组成部分或目标

图像识别:基于目标的描述给目标赋予标志

 

4.图像指标

图像一般由MxN的大小与灰度级L作出判定

1)表示

令f(s,t)表示具有两个连续变量s,t的连续图像函数,s,t的值记为x,y,由一幅图像的坐标张成的实平面为平面空间,x,y称为空间坐标或空间变量

2)图像展示

函数图:两个坐标决定空间位子,第三个是x,y坐标处的函数的灰度值

                                                                          

                                             

Tip:

原点位于左上角,基于一个事实,许多图像扫描都是从左上角开始是,然后一行一行向下移动,其次矩阵习惯在[0,0]处为左上角,一般情况下,用传统矩阵法表示数字图像处理.

 

                                                     

数字化过程一般是M,N,以及灰度值L,M,N无要求,正整数即可,灰度一般以离散灰度1L作为判定,出于存储和量化的考虑,灰度级一般取2的整数次幂,L=2**k,假设离散灰度级是等间隔的,是区间[0,L-1]内的整数。

 

3)指标

动态范围:最大可度量灰度与最小刻度量灰度之比,上限取决于饱和度,下限取决于噪声

对比度:一幅图最高和最低灰度级间的灰度差为对比度1

Tip:

一般而言,一幅图有高的对比度,我们可以认为他有高的动态范围

饱和度:超过饱和度规定的灰度值将被替换为饱和度规定的值

噪声:较暗区域,灰度值低,噪声会掩盖可检测的最低真实灰度级

 

5.常见的图像

RGB图像:使用R,G,B三个通道来表示每个像素的颜色,R,G,B的像素值放在图像矩阵中,三个MxN的二维矩阵分别表示各个像素的RGB分量

                                                

灰度图像:[0-255]数据类型为无符号整数的int8,0表示是黑色,255表示白色

                                                                        

二值图像:由0,1组成,0表示黑色,1表示白色

                                                                         

RGB转灰度 : Gray = R*0.299 + G*0.587+ B* 0.114

2020-02-23 22:07:46 Aoman_Hao 阅读数 148

近几年来,去雾方法得到广泛的研究,汤晓鸥等人发现无雾图像相对于雾化图像具有较高的对比度,通过最大化恢复图像的对比度来实现图像去雾,但由于该方法没有从物理模型上恢复真实的场景反射率,图像去雾后有可能出现颜色过饱和失真。 Kaiming He提出了一种基于暗通道先验的方法,即在有雾图像的特定窗中至少有一个颜色分量的值是零,该算法利用最小值滤波估算出介质传播函数,然后利用软抠图原理对估算的介质传播函数进行优化估计,达到了较好的去雾效果。软抠图需要较高计算量,很难得到实际应用。所以后来Kaiming He又提出了引导滤波法,来精细化透射率。

通过对比实验发现,场景中如果存在较大的天空区域的话,Kaiming He提出的暗通道先验的理论在天空区域将不成立,图像去雾后天空区域存在失真,特別是在天空区域不明显的浓雾环境下。

一 为什么天空区域识别很重要?

人们常用传感器进行测距,在自主导航领域常见测距传感器有两类:第一类是主动式传感器,比如雷达,激光传感器,这类传感器比较精确,但缺点是比较贵;第二类是被动式传感器,比如视觉传感器。这类传感器成本较低,主要依赖于算法,但有些场景精度不好。但随着技术的发展,这些精度问题都可以得到解决。

处理不同透射率区域

改进的基于暗原色先验的图像去雾算法
作者: 蒋建国

对一些含雾图像,基于暗原色先验的去雾结果出现色彩失真,因为含天空、水面等大面积明亮区域的图像,他们的像素值很大,在此区域找不到像素值接近于0的暗原色。

一般情况下大气光A的取值和天空部分应该是非常接近的,而那些符合暗通道的地方则远离天空。

识别出天空区域单独处理

专利《一种基于天空识别与分割的暗通道先验去雾方法》

重点:

1、进行天空识别与分割,确定天空区域与非天空区域不同透射率。
2、引导滤波优化透射率,输出头屋图像

相似操作识别天空区域

1、天空部分平坦区域多,处理成梯度图表示图像的像素落差,梯度值越小的区域表示为平坦区域。

2、设定一个阈值来初步划分天空区域与非天空。

3、对第二步的结果进行扩展处理。

4、对第三步的图的像素平均亮度进行判断,如果大于阈值T则认为是真天空区域。(阈值可以设置为0.8,灰度值为204左右均可),自我构思

该方案可以消除去雾图像边缘处的光晕现象,提高处理效率。

分割天空区域

专利《一种含天空区域雾天图像的去雾方法、服务器及系统 》

步骤

1、利用预设的亮度阈值 + 图像梯度信息,分割天空区域和非天空区域,梯度阈值选择概率最大的梯度,避免误分割;
2、利用四分法或者天空区域大气光值;
3、非天空区域加权图像融合的方法细化透射率;
4、图像去雾


我们希望分为天空、似天空和非天空区域,三个区域采用不同的光透射率。
注:如果其他区域的像素满足以下两个条件认为是似天空区域:
<1> 弱纹理区域
<2> 像素值和Strue区域的平均像素值 相差很小。

其他相关算法程序可以看看我的github

2020-03-23 18:41:14 weixin_42767803 阅读数 42

图像处理基础


图像处理一般是指数字图像处理。数字图像是指用电子设备获得的比较大的二维数组,数组的元素称为像素。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。

在这里插入图片描述

像素的邻接,连接和连通

邻接: 两像素接触。

连接: 邻接并且某属性满足特定相似条件(灰度相等或者同在某个区间)。

连通: 两像素之间有通路连接。

邻域: 像素邻接的点,分为4邻域和8邻域

在这里插入图片描述

图像的表示

颜色空间是在某些标准下对彩色加以说明,常用的有RGB(根据人眼定义,最通用的面向硬件的彩色模型)、CMY(工业印刷)、HSV(数字化处理)、HSI(数字化处理)等。

RGB颜色空间

自然色彩模式,红绿蓝代表可见光谱中的三原色,各按亮度分为256个等级(8bit)。

颜色通道是保存图像颜色信息的通道。RGB采用加法混色法,一个图像由RGB这样三个颜色通道叠加而成。

在这里插入图片描述

灰度图像是一种具有从黑到白256级(8bit)灰度色阶或等级的单色图像,有很多方法可以实现。

在这里插入图片描述

HSV颜色空间

HSV (色相H,饱和度S,明度V)是RGB色彩空间的一种变形,描述色彩更自然直观。

色调H: 表示所处的光谱颜色的位置,取值范围为0°~360°。

饱和度S: 取值范围为0.0~1.0。

亮度V: 取值范围为0.0(黑色)~1.0(白色)。

从RGB到HSV

Cmax=max(R,G,B)
Cmin=min(R,G,B)
V=Cmax
M = Cmax-Cmin
if M != 0, S = (Cmax-Cmin)/Cmax else S = 0
if R = Cmax, H = (G-B)/M * 60
if G = Cmax, H = 120+(B-R)/M * 60
if B = Cmax, H = 240+(R-G)/M * 60
if H < 0, H = H+360
没有更多推荐了,返回首页