基于图信号处理的非侵入式负荷分解

有没有人是利用图信号处理技术进行负荷分解的啊?精度太低,误差好大,有人有相关的python代码嘛?求!

没有做课后题的源码的效果图:
在这里插入图片描述

-第二道题目做法:在createImageGrid函数中创建 3*3像素的小黑块, 语句是:gap = Image.new('RGB', (3, 3)),当然你想要其他的小块也可以,把语句更改为:gap = Image.new('RGB', (3, 3),(255, 255, 255))(这就是小白块了),输入自己想要的R、G、B值,就可以随心所欲更改渐变颜色了。当粘贴替换图片小块后,继续贴小黑块语句是:grid_img.paste(gap, (col * width , row * height )),就产生了想要的效果。

  • 小黑块效果图:
    在这里插入图片描述

小白块效果图:
在这里插入图片描述

  • 第一道题目:
    得到图片的块状版本。
    思路:将图片分割成若干小块,然后再粘贴成完整图像。

源代码:


"""
打开图像,分割图像,将分割好的小块粘贴(可以只要原来的四分之一,来降低像素),保存。
"""
import os
from PIL import Image


#图像路径
target_image1 = '.\\test-data\\专属.jpg'
#分割图形
def splitImage(image, size):

	"""
	将图像按照网格分成多个小图像
	@param {Image} image Pil Image
	@return {List[Image]} 小图像列表
	"""
	#image = Image.open(target_image)
	#获得原始图像尺寸
	W, H = image.size[0], image.size[1]
	# print(image.size)
	# print(size[1])
	#分划的小图像个数 m * n
	m, n = size
	#小图像的尺寸
	w, h = int(W / n), int(H / m)
	#分割好的小图像放在列表中
	imgs = []
	
	#遍历
	for j in range(m):
		for i in range(n):
			#得到小图像并加入到imgs列表
			imgs.append(image.crop((2 * i * w, 2 * j *h, (2 * i + 1) * w, (2 * j + 1) * h)))
			
	return imgs
#粘贴图像
def createImageGrid(images, dims):
	"""
	将图形列表里的小图像按先行后列的顺序拼接为一个大图像
	
	@param {List[Image]} images 小图像列表
	@param {Tuple[int, int]}  dims 大图像的行数和列数
	@return Image 拼接得到的大图像
	"""
	
	m, n = dims
	
	# #确保小图像个数满足要求
	# assert m *n  == len(images)
	#计算小图像的最大尺寸
	width = max([img.size[0] for img in images])
	height = max([img.size[1] for img in images])
	
	#创建大图像对象
	grid_img = Image.new('RGB', (int(n * width / 2), int(m * height / 2 )))
	
	#将小图像粘贴到大图像
	
	for index in range(len(images)):
		#计算要粘贴到的行
		row = int(index / n)
		#计算粘贴到的列
		col = index - n * row
		
		#粘贴
		grid_img.paste(images[index], (col * width, row * height))
		
	return grid_img
	
	
def main():
	#打开图形
	target_image = Image.open(target_image1)
	#分割图形
	target_images =splitImage(target_image,[128, 128])
	#粘贴新图形
	mosaic_image = createImageGrid(target_images, [128, 128])
	#保存
	output_filename = 'mosaic1.png'
	#mosaic_image.save(output_filename)
	mosaic_image.save('D:\python项目\\照片马赛克\\masaka1.png')

if __name__ == '__main__':
	main()

原图:
在这里插入图片描述
块状处理后效果:
在这里插入图片描述