目录
图像处理算法的挑选及运行
本周我们小组的任务主要是挑选本次项目实训中所要用到的最基本图像处理算法(于CSDN或Github上寻找),并对我们小组每个人找到的算法进行比对,最后计划使用一个效果最好的算法来完成接下来的任务。下边是我在本次任务中找到并尝试的集中算法:
二,二进制小波变换-python实现
1.1二维图像单级变换:dwt2()
代码:
import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("maomi.jpg")
img = cv2.resize(img, (448, 448))
# 将多通道图像变为单通道图像
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)
plt.figure('二维小波一级变换')
coeffs = pywt.dwt2(img, 'haar')
cA, (cH, cV, cD) = coeffs
plt.subplot(221), plt.imshow(cA, 'gray'), plt.title("A")
plt.subplot(222), plt.imshow(cH, 'gray'), plt.title("H")
plt.subplot(223), plt.imshow(cV, 'gray'), plt.title("V")
plt.subplot(224), plt.imshow(cD, 'gray'), plt.title("D")
plt.show()
尝试运行时,遇到了如下错误:
ModuleNotFoundError: No module named 'pywt'
搜索之后,在cmd中输入:
pip install PyWavelets
即可解决问题
1.2算法运行:
对此图片进行处理:
此为处理结果:
2.1二维图像多级分解:wavedec2()
实现代码:
import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("maomi.jpg")
img = cv2.resize(img, (448, 448))
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)
plt.figure('二维图像多级分解')
coeffs = pywt.wavedec2(img, 'haar', level=2)
cA2, (cH2, cV2, cD2), (cH1, cV1, cD1) = coeffs
# 将每个子图的像素范围都归一化到与CA2一致 CA2 [0,255* 2**level]
AH2 = np.concatenate([cA2, cH2+510], axis=1)
VD2 = np.concatenate([cV2+510, cD2+510], axis=1)
cA1 = np.concatenate([AH2, VD2], axis=0)
AH = np.concatenate([cA1, (cH1+255)*2], axis=1)
VD = np.concatenate([(cV1+255)*2, (cD1+255)*2], axis=1)
img = np.concatenate([AH, VD], axis=0)
plt.imshow(img,'gray')
plt.title('2D WT')
plt.show()
2.2算法运行
3.1【图像处理】python小波变换
具体代码:
import cv2
import numpy as np
from pywt import dwt2, idwt2
# 读取灰度图
img = cv2.imread('maomi.jpg',0)
# 对img进行haar小波变换:
cA,(cH,cV,cD)=dwt2(img,'haar')
# 小波变换之后,低频分量对应的图像:
cv2.imwrite('maomi.png',np.uint8(cA/np.max(cA)*255))
# 小波变换之后,水平方向高频分量对应的图像:
cv2.imwrite('maomi_h.png',np.uint8(cH/np.max(cH)*255))
# 小波变换之后,垂直平方向高频分量对应的图像:
cv2.imwrite('maomi_v.png',np.uint8(cV/np.max(cV)*255))
# 小波变换之后,对角线方向高频分量对应的图像:
cv2.imwrite('maomi_d.png',np.uint8(cD/np.max(cD)*255))
# 根据小波系数重构回去的图像
rimg = idwt2((cA,(cH,cV,cD)), 'haar')
cv2.imwrite('rimg.png',np.uint8(rimg))
3.2算法运行
如下为处理结果图片: