在遥感大图 选择 小样本 训练出(深度学习)模型后,需要对整个遥感大图进行分类。通过逐块遍历,当然也可以逐像素遍历,进而将分类结果绘制在画板上。
如下为绘制代码:
def render_class2(step,size):#步长,窗口大小
tif_src = r"D:\lishihang\test_tif_peizhun_subset_proj_预测范围.tif"
dataset = gdal.Open(tif_src) # tif数据
model = load_model("D:\lishihang\model.h5") #加载模型
vec = {'猴子': 0, '猫': 1, '狗': 2}# 标签和预测值对应关系
res=np.ones(shape=(dataset.RasterXSize,dataset.RasterYSize,3),dtype=np.uint8)*255 #画板,白色
label=np.random.randint(0,255,size=(3,3)) #随机生成颜色
# print(label)
for i in range(int(size/2),dataset.RasterXSize,step):
for j in range(int(size/2),dataset.RasterYSize,step):
img=get_img(dataset,size,i,j) #得到中心点为i行j列的图像数据
if img is None:
continue
imgs=np.array([img])
# print(imgs.shape)
s = np.argmax(model.predict(imgs)[0])
res[i-int(size/2):i+int(size/2),j-int(size/2):j+int(size/2)]=label[s]
print("testing: ",i,j)
res = np.array([res[:,:,0],res[:,:,1],res[:,:,2]])
#保存标签颜色对应
label2Img(list(vec.keys()), label, "res/render_class2_label_%d_%d.png" % (size,step))
cv2.imwrite("res/render_class2_%d_%d.png" % (size,step),res.T)#保存结果图片
标签颜色对应函数如下:
def label2Img(str,colors,label_src):#存储位置,颜色,标签
# print(str)
res = np.ones((100, 100*len(str)+40, 3), np.uint8) * 255
for i, t in enumerate(colors):
# print(t)
t = tuple([int(t[0]), int(t[1]), int(t[2])])
startx = 10 + 100 * i # 间隔100
starty=20
res = cv2.rectangle(res, (startx, starty), (startx + 90, starty+20), t, thickness=-1)
res = cv2.putText(res, str[i], (startx, starty+10),
fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.4,
color=(255,255,255),lineType=cv2.LINE_AA)
cv2.imwrite(label_src, res)