# -*- 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数量的图片)的更多相关文章

  1. 剑指Offer - 九度1386 - 旋转数组的最小数字

    剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...

  2. 360度3D 旋转插件

    Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...

  3. 20145104张家明 《Java程序设计》第10周学习总结

    20145104张家明 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名(Dom ...

  4. html5人物图片360度立体旋转

    体验效果:http://hovertree.com/texiao/html5/10.htm 下载:http://hovertree.com/hvtart/bjae/t16oddyt.htm 代码如下: ...

  5. VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题(改)

    VirtualBox 5.0.10 中安装 Fedora 23,即使在安装了增强工具后,仍然会发现虚拟机无法根据 VirtualBox 的运行窗口大小自动进行分辨率调节.究其原因,主要是因为 Fedo ...

  6. 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)  # 进行图片的 ...

  7. MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1.编辑框添加变量,并选择变量类型为CString. 2.  使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.

  8. HTML实现图片360度循环旋转

    <style> .header{ -webkit-animation:rotateImg 5s linear infinite;<!--修改旋转周期--> border: 1p ...

  9. (数据科学学习手札142)dill:Python中增强版的pickle

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,相信不少读者朋友们都在Pyth ...

随机推荐

  1. VMware虚拟机环境配置--网络配置

    Hadoop集群搭建第一篇. 环境: VMware workstation 12, centos 6.5 配置虚拟机网络连接模式为NAT模式(共享主机的ip地址). 桥接模式: 和主机windows是 ...

  2. 关于Oracle数据库故障诊断基础架构

    本节包含有关Oracle数据库故障诊断基础结构的背景信息.它包含以下主题: 故障诊断基础架构概述 关于事件和问题 故障诊断基础设施组件 自动诊断信息库的结构,内容和位置 故障诊断基础架构概述 故障诊断 ...

  3. [转] 多核CPU 查看进程分配的CPU具体核id

    转自:https://linux.cn/article-6307-1.html ps. 方法二简明直接 done! 当你在 多核 NUMA 处理器上运行需要较高性能的 HPC(高性能计算)程序或非常消 ...

  4. CentOS7开启防火墙及特定端口

    开启防火墙服务 以前为了方便,把防火墙都关闭了,因为现在项目都比较重要,害怕受到攻击,所以为了安全性,现在需要将防火墙开启,接下来介绍一下步骤. 1, 首先查看防火墙状态: firewall-cmd ...

  5. go 多维度 Map 的数据存取

    多维度 Map 的数据存取 一维情况下的 map 做存取很简单,而二维以上的情况就得小心了. 先来看一个例子: m:=make(map[string]map[string]int)   c:=make ...

  6. JavaScript-client、offset、scroll、定时器

    client offset scroll client.offset.scroll系列 他们的作用主要与计算盒模型,盒子的偏移量和滚动有关 clientTop 内容区域到边框顶部的距离, 说白了, 就 ...

  7. python3+selenium框架设计02-自动化测试框架需要什么

    什么是自动化测试框架 自动化测试框架能够提供便利给用户高效完成一些事情,比如,结构清晰开发脚本,多种方式.平台执行脚本,良好的日志和报告去跟踪脚本执行结果. 关于自动化测试框架的定义有很多,在我大致理 ...

  8. mongodb管理与安全认证

    mongodb数据管理 数据的导出.数据导入数据导出 mongoexport [使用mongoexport -h查看参数] 数据导入 mongoimport [使用mongoimport -h查看参数 ...

  9. 题解-ZeroJudge-c686 高斯符號

    Problem ZeroJudge Solution 考慮到\(\lfloor \frac {km}n\rfloor\)等同於\(km\)整除\(n\),換種表示方法就是\(km\)減去\(km\)模 ...

  10. 一道搜索题【2013 noip提高组 DAY2 t3】华容道

    这篇不多说,具体的解释都在程序里 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果 ...