引言
处理单元格密度不太妥当(以点经过的单元格计算,其实应该考虑点的领域,让这个领域移动,经过单元格计算),但是提取感兴趣区域(ROI)逻辑应该是正确的。
程序截图
10×10坐标网格 60随机轨迹 密度阈值8
随机轨迹图
单元格密度热图
ROI
30×30坐标网格 1000随机轨迹 密度阈值52
随机轨迹图
单元格密度热图
ROI
程序代码
import matplotlib.pyplot as plt
import numpy as np
import math
x_l = input('多少列 x轴范围')
y_l = input('多少行 y轴范围')
x_l = int(x_l)
y_l = int(y_l)
num = input('多少轨迹 随机')
num = int(num)
#找到大于等于阈值的所有单元格
def set(X,min_density):
set = []
d_max = X[0][0]
for i in X:
for j in i:
if j > d_max:
d_max = j
for density in range(d_max,min_density - 1,-1):
index = np.argwhere(X == density)
set.append(index)
return set
#计算一个区域的平均阈值
def get_Avg_Density(X,region):
x0 = region[0][0]
y0 = region[0][1]
x1 = region[1][0]
y1 = region[1][1]
x_len = x1 - x0 + 1#x轴方向个数
y_len = y1 - y0 + 1#y轴方向个数
num = x_len * y_len#个数
density = 0
#计算区域的平均密度
for x in range(x0,x1 + 1):
for y in range(y0,y1 + 1):
density+=X[y][x]
avg_density = density / num
return avg_density
#判断一个区域有没有 用过的点 True-有用过的点
def use_Region(use,region):
x0 = region[0][0]
y0 = region[0][1]
x1 = region[1][0]
y1 = region[1][1]
for x in range(x0,x1 + 1):
for y in range(y0,y1 + 1):
if(use[y][x] == 1):
return True
return False
#把一个区域的点都变成用过
def change_To_Use(use,region):
x0 = region[0][0]
y0 = region[0][1]
x1 = region[1][0]
y1 = region[1][1]
for x in range(x0,x1 + 1):
for y in range(y0,y1 + 1):
use[y][x] = 1
# 画出区域
def draw_Region(region):
x0 = region[0][0]
y0 = region[0