伽玛校正背景较浅的图像

问题描述 投票:0回答:1

我正在尝试使用下面的代码检测图像中ID卡的边界。关键是我使用的伽玛值。我使用值2或3(假设我希望卡在背景中脱颖而出)。我在使用背景较浅或与卡片颜色本身一样轻的照片时遇到了问题。请看下面的图片..第一个是带有深色b / g的原点,第二个是带有伽马校正的原点..与下一个2相同。我在我的智慧结束时试图弄清楚我是怎么做的处理照片与较轻的背景。还粘贴我用来执行伽马校正的代码。请告诉我,如果你们的人可以把我的厚头指向正确的方向:)

import cv2
import numpy as np
import imutils
import math
import sys

img = cv2.imread( sys.argv[1] )
gray1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
invGamma = 3.0
table = np.array([((i / 255.0) ** invGamma) * 255
for i in np.arange(0, 256)]).astype("uint8")

gray = cv2.LUT(gray1, table)
ret,thresh1 = cv2.threshold( gray, 80, 255, cv2.THRESH_BINARY )
cv2.imwrite( 'LUT.jpg', thresh1 )
_, contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Image1

Image1-Gamma-corrected-3

Image2

Image2-Gamma-3

python opencv image-processing edge-detection
1个回答
1
投票

据我了解你的问题,你主要是试图检测卡的边缘?或者您是否试图将卡完全(即切出)与图像分开?

使用伽玛只是在将整个图像转换为灰色后改变整个图像的明显对比度。 OpenCV有很多自己的边缘和对象检测例程,因为我假设您正在尝试进行预处理以提供帮助?

概念(非代码)答案:

分开的渠道

让我指出你的方向不同。如果输入图像始终为彩色,请考虑仅使用三个RGB颜色通道中的一个。这是一个例子:

RED CHANNEL:

RedChannelOnly

绿色通道:

BlueChannelOnly

蓝色通道:

enter image description here

注意蓝色通道相对于红色通道的对比度是多少。根据图像内容,您通常会发现一个通道可以更好地分离所需对象。

如果你看直方图:

Histogram

您可以看到蓝色通道在右侧(所需对象)和左侧峰值(表格上的亮点)之间的距离最大。但红色通道中间的所有东西都聚集在一起。

作为一个想法,您可以使用峰值检测/峰值位置/峰值之间的距离来编程确定每个颜色通道中的相对对比度。

您还可以确定哪个颜色通道的峰值距离另一个通道中的相同峰值最远,然后减去或使用DIFFERENCE或DIVIDE两个通道(下面的“通道数学”中的示例)。


桌布

现在使用桌布,它上面有一个非常高的对比度图案 - 白色(灰色)比ID卡更亮,绿色比卡片更暗。这张卡大多介于两者之间。

使用图像编辑器中的曲线工具提供图形示例,您可以看到将下层和上层夹紧为黑色,您可以隔离中档卡。

但是再次注意直方图:

Histogram

虽然几乎所有东西都在中量值中聚集,但RED通道确实在黑色附近有一个小峰值。以此为指导,我们关闭绿色和蓝色通道,然后关闭下面的CLAMP值和高于卡值范围的值。

曲线工具:

Curves

然后仅产生红色通道 - 注意这是反转的,以使得到的对比度更清晰:

Inverted Red Only


摘要

所以这些隔离概念的主旨是

  1. 检查每个颜色通道以确定哪个颜色通道具有最佳对比度。这将寻找与其他通道最不同的峰值和/或在它们之间寻找具有最宽“谷”的通道中的峰。
  2. 钳制低值和高值以隔离所需对象。这将使用A中的峰值(具有阈值)来确定要钳位和斜坡到所需图像的点。

仅仅使用一般的“伽玛”调整的问题是,你将拖动整个图像以改变表观对比度,当你真正想要做的是消除(钳制)不相关的图像部分时。

虽然我意识到这并不是你所要求的,但我希望它仍然有用。另外,如果您还没有,我建议您在OpenCV中查看更多检测功能。


奖励:有渠道数学的乐趣

这可能对您有用,也可能没有用,但颜色通道之间的乘法,除法,减法,差异,排除有时可以帮助摆脱不需要的背景对象。拿桌布和图案。

让MULTIPLY绿色和蓝色通道得到这个:

Multiply Green and Blue

现在让我们通过RED频道进行DIVIDE

Divide by Red Divide

现在调整RED通道的GAMMA以消除桌布图案(Gamma调整为1.57):

Gamma Adjusted to 1.57

有了这个结果图像:

Final

由于桌布图案消失,当然可以进一步增强对比度。

© www.soinside.com 2019 - 2024. All rights reserved.