自学python-opencv(4)图像金字塔
import cv2
import numpy
def pyramid_demo(image):
level=3
temp=image.copy()
pyramid_image=[]
for i in range(level):
dst=cv2.pyrDown(temp)
pyramid_image.append(dst)
#+连接字符串
cv2.imshow("pyramid_demo"+str(i),dst)
temp=dst.copy()
return pyramid_image
def lapalas_demo(image):
pyramid_image=pyramid_demo(image)
level=len(pyramid_image)
for i in range(level-1,-1,-1):
if (i-1)<0:
expand = cv2.pyrUp(pyramid_image[i], dstsize=image.shape[:2])
# Li=Gi-pyrUp(pyrDown(Gi))
lpls = cv2.subtract(image, expand)
cv2.imshow("lapalas_demo" + str(i), lpls)
else:
expand = cv2.pyrUp(pyramid_image[i], dstsize=pyramid_image[i - 1].shape[:2])
# Li=Gi-pyrUp(pyrDown(Gi))
lpls = cv2.subtract(pyramid_image[i - 1], expand)
cv2.imshow("lapalas_demo" + str(i), lpls)
print("-----------hi python-------------")
img=cv2.imread("./images/timg.bmp")
cv2.namedWindow("imput images",cv2.WINDOW_AUTOSIZE)
cv2.imshow("imput images",img)
lapalas_demo(img)
cv2.waitKey()
cv2.destroyWindow('all')
-------------------------------------------------------------------------------------------------
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,
一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
1】向下取样(下指分辨率) 缩小图像
向上取样是指(上指分辨率)
1:对图像Gi进行高斯核卷积
2:删除所有的偶数行和列
向上取样是指(上指分辨率)
1:对图像Gi进行高斯核卷积
2:删除所有的偶数行和列
[1 4 6 4 1]
[4 16 24 16 4]
高斯核1/256[6 24 36 24 6]
[4 16 24 16 4]
[1 4 6 4 1]
------------
原始图像M*N->处理结果M/2*N/2
每次处理后,结果图像是原来的1/4
上述操作被称为:Octave
1 1/4 1/16 1/64
----------------------------------
2】向上取样是指(上指分辨率)
1:在每个方向上扩大为原来的2倍,新增的行和列
以0填充
2:使用与”向下采用“同样的卷积核乘以4,
获取”新增像素“的新值
注:每次放大的图像比原始图像要模糊
-----------------------------------
向上、向下是不可逆的
向上一般都是模糊的(矩阵添加的是0)
---------------------------
3】pyDown函数及使用
向下取样
dst=cv2.pyrDown(src)
dst:向下取样结果
src:原始图像
[4 16 24 16 4]
高斯核1/256[6 24 36 24 6]
[4 16 24 16 4]
[1 4 6 4 1]
------------
原始图像M*N->处理结果M/2*N/2
每次处理后,结果图像是原来的1/4
上述操作被称为:Octave
1 1/4 1/16 1/64
----------------------------------
2】向上取样是指(上指分辨率)
1:在每个方向上扩大为原来的2倍,新增的行和列
以0填充
2:使用与”向下采用“同样的卷积核乘以4,
获取”新增像素“的新值
注:每次放大的图像比原始图像要模糊
-----------------------------------
向上、向下是不可逆的
向上一般都是模糊的(矩阵添加的是0)
---------------------------
3】pyDown函数及使用
向下取样
dst=cv2.pyrDown(src)
dst:向下取样结果
src:原始图像
4】向上/向下取样可逆性研究
原始图像 向下取样
------------------------
M*N M/2*N/2
-------------------------
原始图像 向上取样
-------------------------
M*N M*2*N*2
------------------------
5】拉普拉斯金字塔
Li=Gi-pyrUp(pyrDown(Gi))
Gi:原始图像
Li:拉普拉斯金字塔图像
原始图像 向下取样
------------------------
M*N M/2*N/2
-------------------------
原始图像 向上取样
-------------------------
M*N M*2*N*2
------------------------
5】拉普拉斯金字塔
Li=Gi-pyrUp(pyrDown(Gi))
Gi:原始图像
Li:拉普拉斯金字塔图像
-----------------------------------
其实你不知道
在你给我糖的时候
有人给了我蛋糕
我没要
我没要蛋糕我不后悔
后悔的是
我以为这颗糖会一直甜