前言
最近要使用四叉树(quad tree)来实现自适应分块,于是自己用Python实现了。
实现出来的效果如下:
算法思想
不断地对图像矩阵进行四分块,直到每个分块中的abs(最大灰度值max-最小灰度值min)<阈值threshold为止。
代码
import numpy as np
import cv2
#正方形类
class square:
#lx、ly为左上角坐标(x对应行号,y对应列号),rx、ry为右下角坐标
def __init__(self,lx,ly,rx,ry):
self.lx=lx
self.ly=ly
self.rx=rx
self.ry=ry
#检查该矩阵中是否满足条件
#参数:原矩阵,阈值
#返回值:布尔类型
def check(self,matrix,threshold):
#小于10的块就不再分了,太小没啥意义
if abs(self.rx-self.lx)<=10:
return True
min=matrix[self.lx][self.ly]
max=matrix[self.lx][self.ly]
for i in range(self.lx,self.rx):
for j in range(self.ly,self.ry):
if matrix[i][j]<min:
min=matrix[i]