基于遍历的分类制图

在遥感大图 选择 小样本 训练出(深度学习)模型后,需要对整个遥感大图进行分类。通过逐块遍历,当然也可以逐像素遍历,进而将分类结果绘制在画板上。

如下为绘制代码:

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)

效果如下(部分截图):
这里写图片描述

猜你喜欢

转载自blog.csdn.net/nima1994/article/details/80965059