test
复制本地路径 | 在线编辑
原始文件为 .py 代码,本文是转换后的 Markdown 文件。
import os
os.chdir(os.path.dirname(__file__))
import cv2
import numpy as np
from scipy.signal import convolve2d
img = np.random.randint(0, 256, size=(1000, 1000))
img[200:800, 200] = img[200:800, 800] = img[200, 200:800] = img[800, 200:800] = 255
img[400:600, 400] = img[400:600, 600] = img[400, 400:600] = img[600, 400:600] = 125
gx = img[1:-1, 1:-1] - img[0:-2, 1:-1]
gy = img[1:-1, 1:-1] - img[1:-1, 0:-2]
# img = cv2.imread('./graffiti.jpg', -1).astype(float)
# gx = np.sum(img[1:-1, 1:-1] - img[0:-2, 1:-1], axis=2)
# gy = np.sum(img[1:-1, 1:-1] - img[1:-1, 0:-2], axis=2)
ksize = 9
# 获取二维高斯核
G = cv2.getGaussianKernel(ksize, 0)
G = G.reshape(-1, 1) @ G.reshape(1, -1)
# 获取全局变化
D = convolve2d(np.abs(gx), G, mode='same') + convolve2d(np.abs(gy), G, mode='same')
D.astype(np.float32).tofile(f'./D_{D.shape[1]}x{D.shape[0]}.raw')
# 获取固有变化
L = np.abs(convolve2d(gx, G, mode='same')) + np.abs(convolve2d(gy, G, mode='same'))
L.astype(np.float32).tofile(f'./L_{L.shape[1]}x{L.shape[0]}.raw')
# results = np.array([D, L])
# results.astype(np.float32).tofile(f'./results_{results.shape[2]}x{results.shape[1]}x{results.shape[0]}.raw')
A = D / (L + 1e-6)
A.astype(np.float32).tofile(f'./A_{A.shape[1]}x{A.shape[0]}.raw')