背景

在做ocr项目时候,会涉及到两个部分,文字区域检测与文字图像识别。在之前的文章中有

介绍目标检测图像数据增强(Data Augmentation)——对比度|加噪|随机调整颜色, 以及旋转数据增强等;这里将介绍下文字图像识别数据增强。

方式

文字图像数据增强来源有两种:

  • 基于文本内容去生成对应的图片
  • 基于已标记的文本图片去进行数据增强

关于基本文本内容去生成对应的图片,网络上有很多生成工具箱: 比如Text Recognition Data Generator, 等,相关文章可以见OCR文本图像合成工具。这里讲解下基于已标记的文本图像进行数据增强。可以借鉴于目标检测图像数据增强(Data Augmentation)——对比度|加噪|随机调整颜色,比较相似,这里再讲解下图像扭曲等形式。

挤压、哈哈镜、扭曲三部曲

参考链接:

  • https://www.shuzhiduo.com/A/MyJxjwQpdn/
  • https://www.cnblogs.com/pingwen/p/12503047.html

上述是基于c语言写的,将其转化为python并用于文字图片扩增。

1. 挤压

图像压效果本质的图像坐标的非线性变换,将图像向内挤压,挤压的过程产生压缩变形,从而形成的效果。

挤压效果的实现是通过极坐标的形式。如下图所示,设图像中心为O(x,y),某点距离中心O的距离为半径R,非线性方式改变半径R但不改变点的方向,就构成了图像挤压。也可以自定义加压中心点,计算半径方式相同。图像像素变换倍率使用是 y=sqrt(x)。

图像上点P与图像中心O的距离为R,图像挤压就是P点坐标映射到OP直线上的点R2位置,其中

|OR2 |=sqrt(OP)*ratio。

原始图片

代码如下

def min_frame(self, img, degree=11):frame = cv2.imread(img) if isinstance(img, str) else imgheight, width, channels = frame.shapecenter_x = width/2center_y = height/2new_data = frame.copy()for i in range(width):for j in range(height):tx = i - center_xty = j - center_ytheta = math.atan2(ty, tx)# 半径radius = math.sqrt(tx**2 + ty**2)radius = math.sqrt(radius) * degreenew_x = int(center_x + radius * math.cos(theta))new_y = int(center_y + radius * math.sin(theta))if new_x < 0:new_x = 0if new_x >= width:new_x = width-1if new_y < 0:new_y = 0if new_y >= height:new_y = height-1for channel in range(channels):new_data[j][i][channel] = frame[new_y][new_x][channel]return new_data

2.哈哈镜

哈哈镜原理与挤压类似,本质上也是图像坐标的非线性变换,将图像向外扩张,扩张的过程产生变形,从而形成的效果。

代码如下

def max_frame(self, img, degree=1):frame = cv2.imread(img) if isinstance(img, str) else imgheight, width, n = frame.shapecenter_x = width / 2center_y = height / 2randius = 40*degree  # 直径real_randius = int(randius / 2)  # 半径new_data = frame.copy()for i in range(width):for j in range(height):tx = i - center_xty = j - center_ydistance = tx ** 2 + tx ** 2# 为了保证选择的像素是图片上的像素if distance < randius ** 2:new_x = tx / 2new_y = ty / 2# 图片的每个像素的坐标按照原来distance 之后的distance(real_randius**2)占比放大即可new_x = int(new_x * math.sqrt(distance) / real_randius + center_x)new_y = int(new_y * math.sqrt(distance) / real_randius + center_y)# 当不超过new_data 的边界时候就可赋值if new_x < width and new_y < height:new_data[j][i][0] = frame[new_y][new_x][0]new_data[j][i][1] = frame[new_y][new_x][1]new_data[j][i][2] = frame[new_y][new_x][2]return new_data

3.扭曲

对图像的像素坐标进行正弦变换,映射到对应坐标就完成了图像扭曲。

代码如下:

 def sin_frame(self, img, degree=3):frame = cv2.imread(img) if isinstance(img, str) else imgheight, width, channels = frame.shapenew_data = np.zeros([height, width, 3], np.uint8)  # null imgfor j in range(width):temp = degree * math.sin(360 * j / width * math.pi/180)   # [-degree,degree]temp = degree + temp  # [0, 2*degree]for i in range(int(temp+0.5), int(height+temp-2*degree)):x = int((i - temp) * height / (height - degree))if x >= height:x = height-1if x < 0:x = 0for channel in range(channels):new_data[i][j][channel] = frame[x][j][channel]return new_data

参考资源

  • https://www.shuzhiduo.com/A/MyJxjwQpdn/
  • https://www.cnblogs.com/pingwen/p/12503047.html
  • https://cloud.tencent.com/developer/article/1697127

使用挤压、哈哈镜、扭曲进行文字图像增强相关推荐

  1. opencv实现哈哈镜变换

    我绝对是无聊爆炸了,所以我又丧心病狂处理二次元图片了. 今天基于像素变换来实现图像的哈哈镜变换,效果就是下面这样了: 哈哈镜分两种,一种是挤压,一种是放大.分别对应凹函数和凸函数. 输入一副图像,首先 ...

  2. indesign排版标点挤压_我於\LaTeX 中文直排实践中所感受的排版需求

    最近,我利用主要是LaTeX 及其下的割注包之属,直排<聲律啟蒙>.现就我的实现方式与由此产生的排版需求,做一点分享. 基本的实现方式 我使用的文档类型为「ctexbook」,并直放.pd ...

  3. 缩进一个字符_Indesign里标点挤压及首行缩进2字符设置

    在ID排版,一个汉字的标点符号是占一个全角即占一个汉字的格子.但因为标点符号的间距比较大,若这样进行排版,会特别影响版面的外观度,致使不好看,需要把标点符号与文字的间距缩小才行,这时需要用到标点挤压工 ...

  4. opencv-python 去除图片文字

    opencv-python 去除图片文字 思路: 原图增强后提取增强后图片的轮廓进行闭运算,闭运算后的图像当掩码来修复原图即可去除文字 图像增强代码链接 import numpy as np impo ...

  5. AI技术实践|用腾讯云智能文本图像增强打造一个掌上扫描仪

    在日常生活.工作中, 受限于拍照技术.拍摄条件等制约,得到的文本图像往往存在光照不均.角度倾斜.文字模糊等情况.这种低质量的文本图像不仅不利于保存和后续研究,也不利于光学字符识别.为了解决以上问题,特 ...

  6. 计算机网络基础知识【5】(08-09)

    Date: 2019-08-09 1.  类声明中,声明抽象类的关键字是 (B )    abstract A.public B.abstract C.final D.class 解释: *  pub ...

  7. C#Opencvsharp4实现几种图像特效

    环境配置:VS2019. Winform.Opencvsharp4 4.5.5.20211231 . .Net Framework 4.8 实验原图: 1.毛玻璃特效 . 原理: 用该像素点领域内的随 ...

  8. 使用Python,OpenCV缩放照片(忽略宽高比,保持宽高比)

    使用Python,OpenCV缩放照片(忽略宽高比,保持宽高比) 1. 效果图 1.1 保持宽高比效果图 1.2 忽略宽高比效果图 1.3 opencv各插值效果图 2. 原理 3. 源码 参考 这篇 ...

  9. 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.4节单位和度量

    本节书摘来自异步社区<设计的品格 探索×呈现×进化的InDesign美学>一书中的第1课1.4节单位和度量,作者[澳]Daphne Shao , Recto , Verso Studio, ...

最新文章

  1. MWC2015中的LTE软基站(转自GeeFlex)
  2. WP8开发日志(1):Toolkit的本地化
  3. 大学哪些专业要学python_非计算机专业的大学生是否有必要学习Python编程
  4. java中怎么进行字符串替换?
  5. redux-form V.7.4.2学习笔记(六)表单同步校验技术
  6. 【2016年第1期】山东省农业大数据发展刍议
  7. 解决自动更新时 系统提示“某些设置由你的系统管理员管理”的方法
  8. php 上传加水印,PHP 图片上传加水印实例
  9. 参数调优为什么要采样_优化参数
  10. springboot格式化时间
  11. struts2 空文件上传解决
  12. BackTrack4 官方指南
  13. matlab离散信号幅频相频特性,信号幅频相频特性画法(频率响应法).pdf
  14. 简单html和css静态网页制作
  15. TCPDF微软雅黑字体
  16. DNS 智能解析功能评测之国内部分总结篇~
  17. Unity-遮挡剔除
  18. vue与ios和Android联调方法
  19. python的MYSQLdb
  20. xfs文件系统:格式化以及挂载

热门文章

  1. HDU 4553 约会安排 (区间合并)【线段树】
  2. C# 像素和毫米转换
  3. 【转载】Selenium使用Page Object实现页面自动测试
  4. CentOS 7 使用useradd添加用户后没有家目录的解决方法
  5. 计算机硬件的选购与组装实验报告,计算机硬件的组装实验报告 (精选可编辑)...
  6. MySQL——深入理解
  7. 在旭日X3派开发板上使用Intel Realsense深度相机
  8. 维克设备管理软件 v2.17 通用网络版 免费
  9. 搜狐新闻客户端Android端侧双擎Hybrid AI框架探索
  10. 模糊照片修复软件有什么?这些软件大家都在用