相关疑难解决方法(0)

用于检测图像中不均匀照明的稳健算法 [仅需要检测]

tesseract OCR 文本识别的最大挑战之一是图像的不均匀照明。我需要一种算法来确定图像是否包含不均匀的照明。

测试图像

我附上了no illumination image,glare image( white-spotted image)和的图像shadow containing image。如果我们给算法一个图像,算法应该分为两类

  1. 没有不均匀的照明 - 我们no illumination image将属于这一类。
  2. 不均匀的照明 - 我们的glare image( white-spotted image), shadow containing image将属于这一类。

无照明图像 - A 类

好形象

不均匀照明图像(眩光图像(白斑图像))B 类

眩光图像

不均匀照明图像(包含图像的阴影)B 类

Ueven 闪电条件

初始方法

  1. 将色彩空间更改为 HSV

  2. HSV值通道直方图分析识别光照不均。

代替前两步,我们可以使用感知亮度通道代替HSV的值通道

  1. 设置低阈值以获取小于低阈值的像素数

  2. 设置高阈值以获取高于高阈值的像素数

  3. 低像素值百分比和高像素值百分比检测不均匀闪电情况(百分比设置阈值)

但我找不到不均匀照明图像之间的大相似之处。我刚刚通过直方图分析发现有些像素的值较低,而有些像素的值较高。

基本上我的感觉是,如果在低阈值中设置一些阈值并找出有多少像素小于低阈值,并设置一些高阈值以找出有多少像素大于该阈值。有了像素数,我们可以得出结论来检测图像中不均匀的闪电条件吗?这里我们需要敲定两个阈值和像素数的百分比来得出结论。

光照良好和不均匀图像之间的V通道直方图分析

白色眩光点图像与不均匀雷电条件图像的V通道直方图分析

def  show_hist_v(img_path):
    img = cv2.imread(img_path)
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h,s,v  = cv2.split(hsv_img)
    histr =cv2.calcHist(v, [0], None, [255],[0,255])
    plt.plot(histr) 
    plt.show() 
    low_threshold =np.count_nonzero(v < 50)
    high_threshold =np.count_nonzero(v …
Run Code Online (Sandbox Code Playgroud)

python algorithm opencv image-processing computer-vision

18
推荐指数
2
解决办法
2146
查看次数

需要有关调色板颜色量化的帮助:java - Android

我正在Android上开发一个项目,这要求我最多可以过滤5种不同的颜色 - 包括背景颜色(近似白色).我不能使用高级数学算法,因为我不太了解数学(我会完全迷失),但是我使用了一些简单的逻辑算法,这些算法部分是通过反复试验得出的,部分是逻辑的,我已经能够结果可以说是70%.但我需要有关如何使其100%工作的建议.

为了测试算法,我在普通白(第5色)纸上用4种不同颜色的笔潦草地写下随机字/字母,然后写了一些代码来解码颜色.所以在代码中算法......

  • 如果红笔墨水像素被解码,则像素被设置为数字红色
  • 如果蓝色笔墨水像素被解码,则像素被设置为数字蓝色
  • 如果绿色笔墨像素被解码,则像素被设置为数字绿色
  • 如果黑色笔墨水像素被解码,则像素被设置为数字黄色

黑色墨水像素设置为数字黄色(非黑色,因为黑色很难在视觉上与墨水黑色区分).

我的代码如下,但首先是我的最佳结果之一.如您所见,黑色(用数字黄色表示)和红色(用数字红色表示)之间的边缘有重叠.就像我说我的代码是部分逻辑部分试错.

我的第一个问题是如何改进这个算法,以便完美地解码/过滤颜色(我之所以选择这种方法是因为我很快就会因为非常复杂的数学而迷路)?

其次,我怎样才能使它适用于不同的光线(白光,黄光......)?

编辑:经过进一步的评论和讨论,我意识到我需要的帮助是调色板颜色量化Adroid java代码示例,谢谢

未解码的原始图像

解码图像,差不多但还不够好

if(  (Blue > Green) &&(Red > Blue) && (Red - Green) > 25 )
    copyOfBM.setPixel(x,  y, Color.RED); //red
else if(  (Blue > Red) && ( (Blue > Green)) )
    copyOfBM.setPixel(x,  y, Color.BLUE);
else if( (Green >= 82) && ((Green - Blue) >= 12)  && 
  ((DecodeLuminaceColor( x, y, copyOfBM )>= 82 ) && 
   (DecodeLuminaceColor( x, y, copyOfBM )< 124))  )
    copyOfBM.setPixel(x,  y, Color.GREEN);
else if( ((Red - …
Run Code Online (Sandbox Code Playgroud)

java algorithm image-processing

5
推荐指数
1
解决办法
1033
查看次数

OCR和字符相似性

我目前正在研究某种OCR(光学字符识别)系统.我已经编写了一个脚本来从文本中提取每个字符并清除(大部分)不规则性.我也知道这个字体.我现在的图像例如是:

M(http://i.imgur.com/oRfSOsJ.png(font)和http://i.imgur.com/UDEJZyV.png(已扫描))

K(http://i.imgur.com/PluXtDz.png(font)和http://i.imgur.com/TRuDXSx.png(已扫描))

C(http://i.imgur.com/wggsX6M.png(font)和http://i.imgur.com/GF9vClh.png(已扫描))

对于所有这些图像,我已经有了一种二进制矩阵(1表示黑色,0表示白色).我现在想知道是否有某种类似数学投影的公式来看这些矩阵之间的相似性.我不想依赖图书馆,因为这不是给我的任务.

我知道这个问题可能看起来有点模糊,并且有类似的问题,但我正在寻找方法,而不是一个包,到目前为止我找不到任何关于该方法的评论.这个问题含糊不清的原因是我真的没有意义开始.我想要做的事实上是在维基百科上描述的:

矩阵匹配包括逐个像素地将图像与存储的字形进行比较; 它也被称为"模式匹配"或"模式识别".[9] 这依赖于输入字形与图像的其余部分正确隔离,并且存储的字形采用相似的字体和相同的比例.此技术最适用于打字文本,并且在遇到新字体时效果不佳.这是基于早期物理光电池的OCR实现的技术,而非直接实现.(http://en.wikipedia.org/wiki/Optical_character_recognition#Character_recognition)

如果有人能帮我解决这个问题,我会非常感激.

math ocr projection matrix

3
推荐指数
1
解决办法
3110
查看次数