数据增强(每10度进行旋转,进行一次增强,然后对每张图片进行扩充10张patch,最后得到原始图片数*37*10数量的图片)
# -*- coding: utf-8 -*-
"""
Fourmi Editor
This is a temporary script file.
"""
import cv2
import os
import numpy as np
import random
import math
def disOrdeImgs(Imgpath,Labelpath,orgTrainPath,orgTestPath,labelTrainPath,labelTestPath):
if not os.path.exists(orgTrainPath):
os.makedirs(orgTrainPath)
if not os.path.exists(orgTestPath):
os.makedirs(orgTestPath)
if not os.path.exists(labelTrainPath):
os.makedirs(labelTrainPath)
if not os.path.exists(labelTestPath):
os.makedirs(labelTestPath)
count=0
for fn in os.listdir(Imgpath): #fn 表示的是文件名
count = count+1
for index,v in enumerate(np.random.permutation(count)):
print('index:',index)
print('v:',v)
if index<=31911:
OrgTrainPath=os.path.join(Imgpath,str(v)+'.jpg')
Trainimg =cv2.imread(OrgTrainPath,0)
TrainPath=os.path.join(orgTrainPath,str(v)+'.jpg')
cv2.imwrite(TrainPath,Trainimg)
LabelTrainPath=os.path.join(Labelpath,str(v)+'.png')
Trainlabel =cv2.imread(LabelTrainPath,0)
TrainPath=os.path.join(labelTrainPath,str(v)+'.png')
cv2.imwrite(TrainPath,Trainlabel)
else:
OrgTestPath=os.path.join(Imgpath,str(v)+'.jpg')
Testimg =cv2.imread(OrgTestPath,0)
TestPath=os.path.join(orgTestPath,str(v)+'.jpg')
cv2.imwrite(TestPath,Testimg)
LabelTestPath=os.path.join(Labelpath,str(v)+'.png')
Testlabel =cv2.imread(LabelTestPath,0)
TestPath=os.path.join(labelTestPath,str(v)+'.png')
cv2.imwrite(TestPath,Testlabel)
def extract_random(full_imgs,full_masks,patch_h,patch_w,N_patches):
if(N_patches%(len(full_imgs))!=0):
print("N_patches: please enter a multiple of 115")
exit()
patches=np.empty((N_patches,patch_h,patch_w))
patches_masks = np.empty((N_patches,patch_h,patch_w))
img_h=full_imgs[0].shape[0]
img_w=full_imgs[0].shape[1]
patch_per_img=int(N_patches/(full_imgs.shape[0]))
print("patches per full image: "+str(patch_per_img))
iter_tot=0
for i in range(full_imgs.shape[0]):
k=0
while k<patch_per_img:
x_center = random.randint(0+int(patch_w/2),img_w-int(patch_w/2))
y_center = random.randint(0+int(patch_h/2),img_h-int(patch_h/2))
patch=full_imgs[i][y_center-int(patch_h/2):y_center+int(patch_h/2),x_center-int(patch_w/2):x_center+int(patch_w/2)]
patch_mask=full_masks[i][y_center-int(patch_h/2):y_center+int(patch_h/2),x_center-int(patch_w/2):x_center+int(patch_w/2)]
#print(patch_mask.shape)
patches[iter_tot]=patch
patches_masks[iter_tot]=patch_mask
iter_tot+=1
k+=1
return patches,patches_masks
def imagePadding(img):
img_h=img.shape[0]
img_w=img.shape[1]
scale=int(math.sqrt(img_h*img_h+img_w*img_w))
scale=scale*2
size=(int(scale),int(scale))
out=cv2.resize(img,size,interpolation=cv2.INTER_AREA)
return out
def get_data(data_imgs_org,
data_groundTruth,
patch_height,
patch_width,
N_subimgs):
imgs_org,imgs_groundTruth=ReadandProcessImage(data_imgs_org,data_groundTruth)
print('imgs.shape',imgs_org.shape)
print('imgs_groundTruth',imgs_groundTruth.shape)
patches_imgs_train,patches_masks_train=extract_random(imgs_org,
imgs_groundTruth,patch_height,patch_width,N_subimgs)
return patches_imgs_train,patches_masks_train
def ReadandProcessImage(orgImgPath,groundTruthPath):
images=[]
labels=[]
for root, dirs, files in os.walk(orgImgPath, topdown=False):
for file in files:
temp=file[:-4]
ImgPath=os.path.join(root,file)
LabelPath=os.path.join(groundTruthPath,temp+'.png')
myimg=cv2.imread(ImgPath,0)
mylabel=cv2.imread(LabelPath,0)
print('ImgPath:',ImgPath)
print('LabelPath:',LabelPath)
#img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)
#mylabel=cv2.cvtColor(mylabel,cv2.COLOR_BGR2GRAY)
assert(len(myimg.shape)==len(mylabel.shape))
assert(myimg.shape[0]==mylabel.shape[0])
assert(myimg.shape[1]==mylabel.shape[1])
img=myimg
#org_h=img.shape[0]
#org_w=img.shape[1]
img=cv2.equalizeHist(img)
img=imagePadding(img)
mylabel=imagePadding(mylabel)
images.append(img)
labels.append(mylabel)
return np.array(images),np.array(labels)
def roatate_img_label_to_file(imgPath,labelPath):
global Iter
Iter=1
def rotateImg(img,label,orgHeight,orgWidth,imgPath,labelPath):
global Iter
(h,w)=img.shape
center=(h/2,w/2)
for i in range(360):
if (i%10!=0):
continue
M = cv2.getRotationMatrix2D(center, i, 1)
imgRotated = cv2.warpAffine(img, M, (h, w))
img0=imgRotated[int(center[0])-int(orgHeight/2):int(center[0])+int(orgHeight/2),
int(center[1])-int(orgWidth/2):int(center[1])+int(orgWidth/2)]
labelRotated = cv2.warpAffine(label, M, (h, w))
label0=labelRotated[int(center[0])-int(orgHeight/2):int(center[0])+int(orgHeight/2),
int(center[1])-int(orgWidth/2):int(center[1])+int(orgWidth/2)]
path0=os.path.join(imgPath,str(Iter+115)+'.jpg')
cv2.imwrite(path0,img0)
path=os.path.join(labelPath,str(Iter+115)+'.png')
cv2.imwrite(path,label0)
Iter=Iter+1
print("ROTATW DONE!!!!")
for root,dirs,files in os.walk(imgPath,topdown=False):
for file in files:
imgpath=os.path.join(root,file)
temp=file[:-4]
labelpath=os.path.join(labelPath,temp+'.png')
img=cv2.imread(imgpath,0)
label=cv2.imread(labelpath,0)
print('imgpath:',imgpath)
print('labelpath:',labelpath)
print('imgshape:',img.shape)
print('labelshape:',label.shape)
assert(len(img.shape)==len(label.shape))
assert(img.shape[0]==label.shape[0])
assert(img.shape[1]==label.shape[1])
org_h=img.shape[0]
org_w=img.shape[1]
img=imagePadding(img)
label=imagePadding(label)
print('imgPadding:',img.shape)
print('labelPadding:',label.shape)
rotateImg(img,label,org_h,org_w,imgPath,labelPath)
data_train_imgs_org="/home/chendali1/Gsj/JX/Image/train/"
data_test_imgs_org="/home/chendali1/Gsj/JX/Image/test/"
data_train_grountTruth="/home/chendali1/Gsj/JX/GT/train/"
data_test_grountTruth="/home/chendali1/Gsj/JX/GT/test/"
patches_path_train='/home/chendali1/Gsj/JX/Patches/Org/train/'
patches_path_test='/home/chendali1/Gsj/JX/Patches/Org/test/'
patches_path_label_train='/home/chendali1/Gsj/JX/Patches/Label/train/'
patches_path_label_test='/home/chendali1/Gsj/JX/Patches/Label/test/'
#rotate_train_imgs_path="/home/chendali1/Gsj/JX/Image/train/"
#rotate_test_imgs_path="/home/chendali1/Gsj/JX/Image/test/"
#rotate_train_label_path="/home/chendali1/Gsj/JX/GT/train/"
#rotate_test_label_path="/home/chendali1/Gsj/JX/GT/test/"
"""
if not os.path.exists(patches_path_train):
os.makedirs(patches_path_train)
if not os.path.exists(patches_path_test):
os.makedirs(patches_path_test)
if not os.path.exists(patches_path_label_train):
os.makedirs(patches_path_label_train)
if not os.path.exists(patches_path_label_test):
os.makedirs(patches_path_label_test)
roatate_img_label_to_file(data_train_imgs_org,data_train_grountTruth)
train_patches,train_groundTruth=get_data(data_train_imgs_org,data_train_grountTruth,224,224,37*115*10)
for i in range(train_patches.shape[0]):
b=np.zeros([train_patches.shape[1],train_patches.shape[2],3])
b[:,:,0]=train_patches[i,:,:]
b[:,:,1]=train_patches[i,:,:]
b[:,:,2]=train_patches[i,:,:]
cv2.imwrite(patches_path_train+str(i)+'.jpg',train_patches[i,:,:])
cv2.imwrite(patches_path_label_train+str(i)+'.png',train_groundTruth[i,:,:])
"""
Imgpath ="/home/chendali1/Gsj/JX/Patches/Org/train/"
Labelpath="/home/chendali1/Gsj/JX/Patches/Label/train/"
orgTrainPath="/home/chendali1/Gsj/DRIVE/images/training/"
orgTestPath="/home/chendali1/Gsj/DRIVE/images/validation/"
labelTrainPath="/home/chendali1/Gsj/DRIVE/annotations/training/"
labelTestPath="/home/chendali1/Gsj/DRIVE/annotations/validation/"
disOrdeImgs(Imgpath,Labelpath,orgTrainPath,orgTestPath,labelTrainPath,labelTestPath)
数据增强(每10度进行旋转,进行一次增强,然后对每张图片进行扩充10张patch,最后得到原始图片数*37*10数量的图片)的更多相关文章
- 剑指Offer - 九度1386 - 旋转数组的最小数字
剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...
- 360度3D 旋转插件
Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...
- 20145104张家明 《Java程序设计》第10周学习总结
20145104张家明 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名(Dom ...
- html5人物图片360度立体旋转
体验效果:http://hovertree.com/texiao/html5/10.htm 下载:http://hovertree.com/hvtart/bjae/t16oddyt.htm 代码如下: ...
- VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题(改)
VirtualBox 5.0.10 中安装 Fedora 23,即使在安装了增强工具后,仍然会发现虚拟机无法根据 VirtualBox 的运行窗口大小自动进行分辨率调节.究其原因,主要是因为 Fedo ...
- 7. 进行图片的数据补全和增强(随机亮度,随机饱和度,随机翻转) Image.open(进行图片的读入) 2.ImageEnhance.Brightness(亮度变化) 3.ImageEnhance.Contrast(饱和度变化) 4.enhance_image.transpose(图片随机翻转) 5.enhance_image.save(进行图片保存)
1.Image.open(image_path) 进行图片的打开 参数说明:image_path 表示图片的路径 2. ImageEnhance.Brightness(image) # 进行图片的 ...
- MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算
1.编辑框添加变量,并选择变量类型为CString. 2. 使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.
- HTML实现图片360度循环旋转
<style> .header{ -webkit-animation:rotateImg 5s linear infinite;<!--修改旋转周期--> border: 1p ...
- (数据科学学习手札142)dill:Python中增强版的pickle
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,相信不少读者朋友们都在Pyth ...
随机推荐
- openstack Q版部署-----安装报错问题
1.实例开机提示找不到磁盘Booting from Hard Disk... GRUB. 开启 CPU 虚拟化支持. 将计算节点 nova.conf 配置修改如下即可: [libvirt] cpu_m ...
- MySQL主从复制故障1595报错【原创】
服务器环境 架构图 架构搭成后,在B机器上发现主从报错Last_IO_Errno: 1595 Last_IO_Error: Relay log write failure: could not que ...
- requests支持socks5代理了
记录下 以前: import socket import socks from requests_html import HTMLSession session=HTMLSession() socks ...
- 009_关闭linux的THP
背景:公司某个大型业务系统反馈最近数据库服务器总是宕机(此处描述不准确,后面解释),最后,客户.运维人员都觉得实在是忍无可忍了,项目经理打电话找到我问是否能帮忙诊断一下,刚好第二天要去现场沟通另外一个 ...
- WebSocket参考
websocker是一种网页和服务端建立tcp全双工通信的技术,可以不再让页面进行向服务器发送轮询请求. 需要注意使用的场景,如果建立的tcp过多的话,会对服务器有很大压力. WebSocket前后台 ...
- jmeter设置全局变量
2017年4月20日 10:07:37 星期四 情景, 从第一个请求的结果中匹配出code, 当作参数去做下次请求 以抢红包为例: 1. 创建红包, 并从返回结果中获取红包code 2. 将code设 ...
- python学习第7天
编码的进阶 文件操作 深浅copy
- PHP--php时间差8个小时的问题
自PHP5.0开始,用PHP获取系统时间时,时间比当前时间少8个小时.原因是PHP.ini中没有设置timezone时,PHP是使用的UTC时间,所以在中国时间要少8小时. 解决办法: 1.在PHP. ...
- mysql-约束介绍
一.约束介绍 约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性.一致性.约束条件与数据类型宽度一样都是可选参数. 常用约束: PRIMARY KEY (PK) 标识该字段为该表的主 ...
- 如何用Axure快速制作APP交互原型
对于产品经理来说,熟练使用一些常用软件是一项十分必要的技能.其中,作为一个专业的快速原型设计工具,Axure RP无疑在产品人心中拥有一个难以撼动的地位.但就要PS一样,虽然足够专业,但同样也会存在使 ...