随笔小杂记(三)——将遥感大图随机分割成小图作为训练集

闲谈

这个是我师兄给我的代码,防止以后可能还要用,在这里也做个备份~

代码

#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()

随笔小杂记(三)——将遥感大图随机分割成小图作为训练集相关推荐

  1. python/numpy随机选取训练集/测试集索引

    在训练模型中, 往往需要对数据集进行处理,从数据集中随机选取部分数据作为训练集,而另一部分数据作为测试集,一个常用的方法是随机选取索引,下面介绍两种从0~n中随机选取x个不重复索引的方法. 注意下述两 ...

  2. java 鼠标停留时,[Java教程]鼠标悬浮停留三秒 显示大图_星空网

    鼠标悬浮停留三秒 显示大图 2014-06-27 0 网站大连烟花网 http://dlyh365.com *{margin:0;padding:0;list-style-type:none;} im ...

  3. python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码

    剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...

  4. 关于做爬虫项目的一些小杂记

    关于做爬虫项目的一些小杂记–pyppeteer 1.启动参数解释(待补充) # 'headless': False 是否以"无头"的模式运行,,即是否显示窗口,默认为 True(不 ...

  5. 梯度下降:全梯度下降算法(FG)、随机梯度下降算法(SG)、小批量梯度下降算法(mini-batch)、随机平均梯度下降算法(SAG)。梯度下降法算法比较和进一步优化。

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.2 梯度下降(Gradient Descent) 2.2. ...

  6. html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

    Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样,编写一次, 然后在其他View中被反复使用. 一般放在" ...

  7. OpenCV实践小项目(三) - 停车场车位实时检测

    1. 写在前面 今天整理OpenCV入门的第三个实战小项目,前面的两篇文章整理了信用卡数字识别以及文档OCR扫描, 大部分用到的是OpenCV里面的基础图像预处理技术,比如轮廓检测,边缘检测,形态学操 ...

  8. 一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?

    如题:一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁? 要求使用java实现求得大僧小僧各有多少人? public class shdjshj {public static void m ...

  9. C语言随笔小算法:创建双向链表

    C语言随笔小算法:创建双向链表 双向链表两个指针域!head定住,tail移动! 代码: #include "stdlib.h" #include "stdio.h&qu ...

  10. C语言随笔小算法:单项链表如何实现队列

    C语言随笔小算法:单项链表如何实现队列 参考链接: https://blog.csdn.net/u012895183/article/details/81914767 代码:

最新文章

  1. iOS10.3 的评论系统
  2. 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
  3. MySQL 高级 - 存储过程 - 语法 - loop循环
  4. opcuaclient 文档_连接协议-OPC UA Client
  5. php 七牛云fetch,七牛云调用类
  6. 201触摸ic应用电路_PCB板和集成电路的区别有哪些
  7. python list 切片 复杂度_彻底理解Python list切片原理
  8. STM32线缆综合测试系统
  9. ubuntu18.04 安装Teamviewer15出现依赖库出错
  10. 要用计算机才能算的题,计算机基础题精选,要考90分以上的同学进考场前必看 -电脑资料...
  11. 【Citrix】XenCenter更新VM内存属性
  12. 最新消息!OKR周报新模板!
  13. 机器学习UCI数据库说明
  14. 疫情期间大学生在线学习效果调查报告
  15. java求方程的解_给定一个 n 元一次方程组,求方程组的解。(java8)
  16. app开发人员配置【职责】
  17. C#操作excel的打印分页符问题
  18. 7-13 打印金字塔图案
  19. ggalluvial:冲击图展示组间变化、时间序列和复杂多属性alluvial diagram
  20. 解决阿里云服务器被恶意挖矿问题

热门文章

  1. 分布式唯一id生成器的想法
  2. WAMPServer安装和配置
  3. iOS 性能优化:Instruments 工具的救命三招
  4. 《大教堂与市集》读后感
  5. 使用Emit动态调用方法(技术原型)
  6. Java类获取Spring容器的bean
  7. zend studio 免注册无限试用
  8. Java神鬼莫测之MyBatis中$与#的区别(五)
  9. onerror捕获异常
  10. MySQL 各种变量