随笔小杂记(三)——将遥感大图随机分割成小图作为训练集
随笔小杂记(三)——将遥感大图随机分割成小图作为训练集
闲谈
这个是我师兄给我的代码,防止以后可能还要用,在这里也做个备份~
代码
#coding=utf-8
import numpy as np
import cv2
import tqdm
import os
from tqdm import trange
import random
img_w = 2048
img_h = img_wimage_sets = ['1_fake.tif', '2_fake.tif', '3_fake.tif', '4_fake.tif']#原图的名字
label_sets = ['1_label.tif', '2_label.tif', '3_label.tif', '4_label.tif']#mndwi做label的图像名字
dataroot = 'E:\\data\\SCI(7yue)\\New_dict_src2MNDWI_label(7yue)\\fake_mndwi_label'
outputpath = 'E:\\data\\SCI(7yue)\\New_dict_src2MNDWI_label(7yue)\\fake_MNDWI_label_slide'def gamma_transform(img, gamma):gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(2048)]gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)return cv2.LUT(img, gamma_table)def random_gamma_transform(img, gamma_vari):log_gamma_vari = np.log(gamma_vari)alpha = np.random.uniform(-log_gamma_vari, log_gamma_vari)gamma = np.exp(alpha)return gamma_transform(img, gamma)def rotate(xb, yb, angle):M_rotate = cv2.getRotationMatrix2D((img_w / 2, img_h / 2), angle, 1)xb = cv2.warpAffine(xb, M_rotate, (img_w, img_h))yb = cv2.warpAffine(yb, M_rotate, (img_w, img_h))return xb, ybdef blur(img):img = cv2.blur(img, (3, 3))return imgdef add_noise(img):for i in range(200): #添加点噪声temp_x = np.random.randint(0, img.shape[0])temp_y = np.random.randint(0, img.shape[1])img[temp_x][temp_y] = 255return imgdef data_augment(xb, yb):if np.random.random() < 0.25:xb, yb = rotate(xb, yb, 90)if np.random.random() < 0.25:xb, yb = rotate(xb, yb, 180)if np.random.random() < 0.25:xb, yb = rotate(xb, yb, 270)if np.random.random() < 0.25:xb = cv2.flip(xb, 1) # flipcode > 0:沿y轴翻转yb = cv2.flip(yb, 1)if np.random.random() < 0.25:xb = random_gamma_transform(xb, 1.0)if np.random.random() < 0.25:xb = blur(xb)if np.random.random() < 0.2:xb = add_noise(xb)return xb, ybdef creat_dataset(image_num, mode='original'):print('creating dataset...')image_each = image_num / len(image_sets)g_count = 0lenn = len(image_sets)for i in trange(lenn):count = 0# print(dataroot)# print(dataroot + '\\' + image_sets[i]+"111")src_img = cv2.imread(dataroot + '\\' +image_sets[i]) # 3 channels# print(src_img.shape)# print(dataroot + '\\' + label_sets[i]+'222')label_img = cv2.imread(dataroot + '\\' + label_sets[i],cv2.IMREAD_GRAYSCALE) # single channel# label_img=cv2.cvtColor(label_img,cv2.COLOR_BGR2GRAY)#转换为灰度图X_height, X_width, _ = src_img.shapewhile count < image_each:random_width = random.randint(0, X_width - img_w - 1)random_height = random.randint(0, X_height - img_h - 1)# print("random_width", random_width, "--"," random_height", random_height)src_roi = src_img[random_height:random_height +img_h, random_width:random_width + img_w, :]# print('src: ', random_height,"--", random_height +img_h," ", random_width, "--", random_width + img_w)label_roi = label_img[random_height:random_height +img_h, random_width:random_width + img_w]# print('label: ', random_height,"--", random_height +img_h," ", random_width, "--", random_width + img_w)# print(src_roi.shape)# print(label_roi.shape)if (np.sum(label_roi==0)>(img_h*img_w)*0.08 and np.sum(label_roi==255)>(img_h*img_w)*0.08):#加入标签判别,全水和全非水的剔除if mode == 'augment':src_roi, label_roi = data_augment(src_roi, label_roi)# visualize = np.zeros((2048, 2048)).astype(np.uint8)# visualize = label_roi * 50# if os.path.exists(dataroot + '\\differentsize\\20484\\visualize') == False:# os.makedirs(dataroot + '\\differentsize\\20484\\visualize')if os.path.exists(outputpath + '\\differentsize\\2048\\src') == False:os.makedirs(outputpath + '\\differentsize\\2048\\src')if os.path.exists(outputpath + '\\differentsize\\2048\\label') == False:os.makedirs(outputpath + '\\differentsize\\2048\\label')# cv2.imwrite(# (dataroot + '\\differentsize\\20484\\visualize\\' + '%d_vis.png' % g_count),# visualize)#用于原来的DeeplabV3+训练的命名# cv2.imwrite(# (outputpath + '\\differentsize\\2048\\src\\' + '%d_leftImg8bit.png' % g_count),# src_roi)# cv2.imwrite((outputpath + '\\differentsize\\2048\\label\\' +# '%d_gtFine_labelIds.png' % g_count), label_roi)#生产通用命名cv2.imwrite((outputpath + '\\differentsize\\2048\\src\\' + '%d_src.png' % g_count),src_roi)cv2.imwrite((outputpath + '\\differentsize\\2048\\label\\' +'%d_label.png' % g_count), label_roi)print('saving:',outputpath + '\\differentsize\\2048\\src\\' + '%d_src.png' % g_count)count += 1g_count += 1else:# print('标签出错')passdef main():creat_dataset(image_num=800, mode='original')if __name__ == "__main__":print(dataroot)main()
随笔小杂记(三)——将遥感大图随机分割成小图作为训练集相关推荐
- python/numpy随机选取训练集/测试集索引
在训练模型中, 往往需要对数据集进行处理,从数据集中随机选取部分数据作为训练集,而另一部分数据作为测试集,一个常用的方法是随机选取索引,下面介绍两种从0~n中随机选取x个不重复索引的方法. 注意下述两 ...
- java 鼠标停留时,[Java教程]鼠标悬浮停留三秒 显示大图_星空网
鼠标悬浮停留三秒 显示大图 2014-06-27 0 网站大连烟花网 http://dlyh365.com *{margin:0;padding:0;list-style-type:none;} im ...
- python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码
剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...
- 关于做爬虫项目的一些小杂记
关于做爬虫项目的一些小杂记–pyppeteer 1.启动参数解释(待补充) # 'headless': False 是否以"无头"的模式运行,,即是否显示窗口,默认为 True(不 ...
- 梯度下降:全梯度下降算法(FG)、随机梯度下降算法(SG)、小批量梯度下降算法(mini-batch)、随机平均梯度下降算法(SAG)。梯度下降法算法比较和进一步优化。
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.2 梯度下降(Gradient Descent) 2.2. ...
- html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...
Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样,编写一次, 然后在其他View中被反复使用. 一般放在" ...
- OpenCV实践小项目(三) - 停车场车位实时检测
1. 写在前面 今天整理OpenCV入门的第三个实战小项目,前面的两篇文章整理了信用卡数字识别以及文档OCR扫描, 大部分用到的是OpenCV里面的基础图像预处理技术,比如轮廓检测,边缘检测,形态学操 ...
- 一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?
如题:一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁? 要求使用java实现求得大僧小僧各有多少人? public class shdjshj {public static void m ...
- C语言随笔小算法:创建双向链表
C语言随笔小算法:创建双向链表 双向链表两个指针域!head定住,tail移动! 代码: #include "stdlib.h" #include "stdio.h&qu ...
- C语言随笔小算法:单项链表如何实现队列
C语言随笔小算法:单项链表如何实现队列 参考链接: https://blog.csdn.net/u012895183/article/details/81914767 代码:
最新文章
- iOS10.3 的评论系统
- 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
- MySQL 高级 - 存储过程 - 语法 - loop循环
- opcuaclient 文档_连接协议-OPC UA Client
- php 七牛云fetch,七牛云调用类
- 201触摸ic应用电路_PCB板和集成电路的区别有哪些
- python list 切片 复杂度_彻底理解Python list切片原理
- STM32线缆综合测试系统
- ubuntu18.04 安装Teamviewer15出现依赖库出错
- 要用计算机才能算的题,计算机基础题精选,要考90分以上的同学进考场前必看 -电脑资料...
- 【Citrix】XenCenter更新VM内存属性
- 最新消息!OKR周报新模板!
- 机器学习UCI数据库说明
- 疫情期间大学生在线学习效果调查报告
- java求方程的解_给定一个 n 元一次方程组,求方程组的解。(java8)
- app开发人员配置【职责】
- C#操作excel的打印分页符问题
- 7-13 打印金字塔图案
- ggalluvial:冲击图展示组间变化、时间序列和复杂多属性alluvial diagram
- 解决阿里云服务器被恶意挖矿问题