图像增广与扩充—带有噪声的黑白裂缝图像扩充,用于裂缝检测训练

文章目录

  • 图像增广与扩充---带有噪声的黑白裂缝图像扩充,用于裂缝检测训练
    • 1. 初始数据获得
    • 2. 传统图像扩充、基于深度学习的图像扩充(GAN网络)
    • 3. 将生成的裂缝图像和黑色背景融合
    • 4. 添加噪声
    • 5. 最终得到裂缝图像以及对应的label(记录着裂缝的位置)

目前整理了githup仓库,欢迎star: Du-danger

1. 初始数据获得

  • 初始的裂缝数据,可以从github上搜索crack以及其他资源去获得。我这里只在github上找了一些就够了。
  • 然后对这些图像基于opencv去转化为黑白图像。
  • 然后截图处理,使裂缝可以占满它所在的图像。因为到时候还要贴图,为之后获得标签(位置信息)做铺垫。
  • 然后初始的数据就获得了。注意此时的数据是,黑白的图像,并且裂缝占满他所在的图像,每张图像的像素大小大概率是不一样的。

2. 传统图像扩充、基于深度学习的图像扩充(GAN网络)

  • 传统方法:这里只使用了旋转和尺寸变换(resize)。裁剪等其他的方法没用的必要其实。
  • GAN深度扩充:生成器使用反卷积,判别器使用卷积即可。详细可见:
    使用GAN(生成对抗网络)进行图像生成

3. 将生成的裂缝图像和黑色背景融合

  • 融合时,也可以对裂缝图像(假设原尺寸为256*256)尺寸变换和旋转,之后直接融合到黑色背景(1024*1024)上去即可。
def add_obj(background, img, x, y):''''将img融合到background上去background: 背景img: 要融合的裂缝图像x,y: 要融合的位置'''bg = background.copy()h_bg, w_bg = bg.shape[0], bg.shape[1]h, w = img.shape[0], img.shape[1]# Calculating coordinates of the top left corner of the object image to the backgroundx_tl = x - int(w/2)y_tl = y - int(h/2)    # Calculating coordinates of the bottom right corner of the object image to the backgroundx_br = x + int(w/2)y_br = y + int(h/2)w1 = x_br - x_tlh1 = y_br - y_tlif (x_tl >= 0 and y_tl >= 0) and (x_br < w_bg and y_br < h_bg):a = bg[y_tl:y_br, x_tl:x_br]b = img[0:h1, 0:w1]c = np.where(b>50, b, a)bg[y_tl:y_br, x_tl:x_br] = cbg[bg>50] = 255bg[bg<=50] = 0return bg, x_tl, y_tl, x_br, y_brelse:return None

4. 添加噪声

'''
生成黑白背景并随机生成噪声
'''
def add_small(w, h):root_path = 'noise/small'files_list = os.listdir(root_path)n = len(files_list)k = np.random.randint(0, n)img = cv2.imread(os.path.join(root_path, files_list[k]), 0)img = cv2.resize(img, (h, w))return imgdef add_big(w, h):root_path = 'noise/big'files_list = os.listdir(root_path)n = len(files_list)k = np.random.randint(0, n)img = cv2.imread(os.path.join(root_path, files_list[k]), 0)img = cv2.resize(img, (h, w))return imgdef get_xy(w, h, w1, h1):a = w - w1 - 1b = h - h1 - 1x = np.random.randint(0, a)y = np.random.randint(0, b)return x, ydef add_noise(img):w = img.shape[1]h = img.shape[0]# 小斑点count = np.random.randint(100, 300)for _ in range(0, count):w1 = np.random.randint(10, 15)h1 = np.random.randint(10, 15)x, y = get_xy(w, h, w1, h1)img[x:x+w1, y:y+h1] = add_small(w1, h1)# 方形count = np.random.randint(3, 5)for _ in range(0, count):w1 = np.random.randint(30, 50)h1 = np.random.randint(30, 50)x, y = get_xy(w, h, w1, h1)img[x:x+w1, y:y+h1] = add_small(w1, h1)# 长形count = np.random.randint(3, 5)for _ in range(0, count):w1 = np.random.randint(10, 15)h1 = np.random.randint(30, 50)x, y = get_xy(w, h, w1, h1)img[x:x+w1, y:y+h1] = add_small(w1, h1)# 扁形count = np.random.randint(3, 5)for _ in range(0, count):w1 = np.random.randint(30, 50)h1 = np.random.randint(10, 15)x, y = get_xy(w, h, w1, h1)img[x:x+w1, y:y+h1] = add_small(w1, h1)return img

5. 最终得到裂缝图像以及对应的label(记录着裂缝的位置)

  • 最终得到crack文件夹,img是扩充生成的图片,label是对应的裂缝位置信息(保存为xml格式),可以用来训练。
  • 生成图像示例:
  • 对应label示例(xml文件):

图像增广与扩充---带有噪声的黑白裂缝图像扩充,用于裂缝检测训练相关推荐

  1. 动手学深度学习(二十六)——图像增广(一生二,二生三,三生万物?)

    文章目录 一.图像增广 二.常用的图像增广方法 1. 翻转和裁减 2. 颜色改变 3. 叠加使用多种数据增广方法 三.使用图像增广进行训练 四.总结(干活分享) 一.图像增广 定义&解释: 通 ...

  2. 图像增广:强化深度学习的视觉表现力

    目录 摘要: 1. 图像增广简介 2. 图像增广的原理 3. 常见的图像增广技术 4. 如何在实际项目中应用图像增广 5.实际应用 摘要: 当今,深度学习已经在计算机视觉领域取得了令人瞩目的成就.图像 ...

  3. [pytorch、学习] - 9.1 图像增广

    参考 9.1 图像增广 在5.6节(深度卷积神经网络)里我们提过,大规模数据集是成功应用神经网络的前提.图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但 ...

  4. 【图像增广库imgaug】官方文档翻译(一):加载并增强图片

    文章目录 前言 一.加载并增广一张图片 二.加载并显示一张图片 三.增强图像 四.增强一组图像 五.同时用很多增强图像技术 六.增强不同尺寸的图片 前言 imgaug是一个很好用的图像增广库.学习的最 ...

  5. y空间兑换代码_进行图像增广的15+种功能总结和Python代码实现

    python代码可以自己扩充图像数据集. ​ 无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像. 但是如果遇到特殊情况: 我们的数据集结构复杂(例如3个输入图 ...

  6. 进行图像增广的15+种功能总结和Python代码实现

    python代码可以自己扩充图像数据集. ​ 无论我们喜欢Keras还是Pytorch,我们都可以使用丰富的资料库来有效地增广我们的图像. 但是如果遇到特殊情况: 我们的数据集结构复杂(例如3个输入图 ...

  7. 街景字符识别2-图像读取及图像增广

    1 目的 PIL读取数据 PIL+Torch生成小批量图像数据样本 理解Baseline中torchvision.transforms进行图像增广的基本使用方法. 2 图像读取 Python中完成数据 ...

  8. 图像处理:手写实现图像增广算法(旋转、亮度调整、裁剪与拼接)

    目录 前言 算法理论 基础实现 a.旋转 b.亮度调整 c.裁剪及拼接 随机调整参数 d.随机翻转算法 e.随机颜色明暗调整算法 f.随机裁剪算法 实验分析 本章小结 参考文章 前言 图像增广算法在计 ...

  9. 计算机视觉:数据预处理-图像增广方法

    计算机视觉:数据预处理-图像增广方法 数据预处理 随机改变亮暗.对比度和颜色等 随机填充 随机裁剪 随机缩放 随机翻转 随机打乱真实框排列顺序 图像增广方法汇总 批量数据读取与加速 数据预处理 在计算 ...

最新文章

  1. crt证书linux使用,linux下使用openssl生成https的crt和key证书
  2. MySQL中只会count(),sum()?累加运算没听过?
  3. index seek与index scan
  4. pycharm远程和本地同时_pycharm远程开发之django配置
  5. WPF 3D基础学习 - 画布、相机、Model3D(1)
  6. SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据
  7. dtrace-stap-book
  8. Android—RxJava库知识
  9. Georgia and Bob(Poj 1704)Nim 博弈
  10. JDK源码学习路线~每天学一点~每天进步一点点
  11. eclipse 常用设置(二)
  12. R语言相关关系可视化函数梳理
  13. HFSS阵列天线仿真
  14. vb中查询mysql_vb数据库查询语句-vb中使用sql语句-vb读取sql语句的字段
  15. php简历程序模板,PHP程序员工作简历模板下载word格式
  16. Quartz 源码解析(一) —— 基本介绍
  17. 万年历/节假日/日历API
  18. oracle免安装和安装版区别,Oracle免安装客户端
  19. 【HTML 教程系列第 9 篇】什么是 HTML 中的换行标签 br
  20. 那些好玩的生成器网站

热门文章

  1. 史上最全Nginx配置优化
  2. vs2015安装Qt插件问题
  3. 31 个Python代码实现的常用功能(附案例源码)
  4. VSCode、notepa++列选择(垂直选中)快捷键方法
  5. (33):SSR是什么
  6. Kolmogorov-Smirnov test 详细介绍
  7. 3万元微型电动车,能否成为蔚来的“回港”利器?
  8. 如何查看域控计算机是哪个用户登陆,查看域控制器上登录用户
  9. 从业4-证券投资基金的监管
  10. IEC61131-3标准的基本概念和定义