有没有人知道OpenCV实现中的概率Hough变换的特定算法?我的意思是,是否有关于算法的参考文件或文档?
为了得到这个想法,我当然可以查看源代码,但我想知道是否有任何关于它的文档. - 它不在源代码的注释中(OpenCV 1.0).
谢谢!
-斤
我正在研究虹膜识别算法,该算法将这些类型的图像处理成用于识别和认证目的的唯一代码.
在过滤,智能阈值处理,然后在图像中找到边缘之后,下一步显然是将圆圈与瞳孔和虹膜拟合.我环顾四周使用的技术是圆形霍夫变换.这是我实现的代码.对于神秘的变量名称感到抱歉.
print "Populating Accumulator..."
# Loop over image rows
for x in range(w):
# Loop over image columns
for y in range(h):
# Only process black pixels
if inp[x,y] == 0:
# px,py = 0 means pupil, otherwise pupil center
if px == 0:
ra = r_min
rb = r_max
else:
rr = sqrt((px-x)*(px-x)+(py-y)*(py-y))
ra = int(rr-3)
rb = int(rr+3)
# a is the width of the image, b is the height
for _a in range(a):
for …Run Code Online (Sandbox Code Playgroud) 通过将图像转换为灰度然后模糊处理图像后,我正在尝试使用以下参数应用霍夫圆变换:
这是我尝试过的众多图片之一:http: //i.stack.imgur.com/JGRiM.jpg
但即使参数放松,算法也无法识别球.
(当我用GIMP中创建的圆圈图像尝试它时效果很好)
我一直在研究一个关于如何在图像中找到简单篮球的宠物项目.在过去的几周里,我尝试了一些使用hough.circles和转换等的排列,但我似乎无法将代码示例和我自己的修补程序隔离开来.
这是一张示例照片:
这是一个简单版本的圆形查找代码之后的结果我一直在修补:

任何人都知道我哪里出错了,我怎么能把它弄好?
这是我摆弄的代码:
import cv2
import cv2.cv as cv # here
import numpy as np
def draw_circles(storage, output):
circles = np.asarray(storage)
for circle in circles:
Radius, x, y = int(circle[0][3]), int(circle[0][0]), int(circle[0][4])
cv.Circle(output, (x, y), 1, cv.CV_RGB(0, 255, 0), -1, 8, 0)
cv.Circle(output, (x, y), Radius, cv.CV_RGB(255, 0, 0), 3, 8, 0)
orig = cv.LoadImage('basket.jpg')
processed = cv.LoadImage('basket.jpg',cv.CV_LOAD_IMAGE_GRAYSCALE)
storage = cv.CreateMat(orig.width, 1, cv.CV_32FC3)
#use canny, as HoughCircles seems to prefer ring like circles to filled ones.
cv.Canny(processed, processed, …Run Code Online (Sandbox Code Playgroud) 我正在使用GPUImageHoughTransformLineDetector来尝试检测图像中突出显示的文本:

我使用以下代码来尝试检测边界蓝框线:
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:rawImage];
GPUImageHoughTransformLineDetector *lineFilter = [[GPUImageHoughTransformLineDetector alloc] init];
[stillImageSource addTarget:lineFilter];
GPUImageLineGenerator *lineDrawFilter = [[GPUImageLineGenerator alloc] init];
[lineDrawFilter forceProcessingAtSize:rawImage.size];
__weak typeof(self) weakSelf = self;
[lineFilter setLinesDetectedBlock:^(GLfloat *flt, NSUInteger count, CMTime time) {
NSLog(@"Number of lines: %ld", (unsigned long)count);
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
[blendFilter forceProcessingAtSize:rawImage.size];
[stillImageSource addTarget:blendFilter];
[lineDrawFilter addTarget:blendFilter];
[blendFilter useNextFrameForImageCapture];
[lineDrawFilter renderLinesFromArray:flt count:count frameTime:time];
weakSelf.doneProcessingImage([blendFilter imageFromCurrentFramebuffer]);
}];
[stillImageSource processImage];
Run Code Online (Sandbox Code Playgroud)
无论edgeThreshold还是1023行,每次运行此命令时,结果输出如下所示:

我不清楚为什么改变门槛没有做任何事情,但我确信我误解了一些事情.任何人对如何做到这一点有任何想法?
我正在做一些简单的OCR车牌识别系统.我正在使用HaarCascades找到车牌,然后我需要将这个盘子标准化,将其放入我的OCR模块中.我正在使用填充物找到汽车板的主要轮廓,然后我执行霍夫变换,找到汽车板的上下边界:


这是代码的一部分,我执行Hough变换^
HoughLinesP(canny_img, lines, 1, CV_PI/180, 80, 80, 30 );
for ( size_t i = 0; i < lines.size(); i++ ) {
line (output, Point(lines[i][0], lines[i][3]), Point(lines[i][4], lines[i][5]), Scalar(0,0,255), 1, 8 );
}
Run Code Online (Sandbox Code Playgroud)
现在我需要沿着这两条线切割和旋转这张照片.我怎样才能做到这一点?我明白我需要使用点Point(lines [i] [0]).. Point(第i行),但是我应该用它们做什么?
所以基本上,我需要得到类似的东西:


所以在第一步我只需要削减上下边界.
我想用Hough Circle算法检测眼睛虹膜及其中心.
我正在使用此代码:
private void houghCircle()
{
Bitmap obtainedBitmap = imagesList.getFirst();
/* convert bitmap to mat */
Mat mat = new Mat(obtainedBitmap.getWidth(),obtainedBitmap.getHeight(),
CvType.CV_8UC1);
Mat grayMat = new Mat(obtainedBitmap.getWidth(), obtainedBitmap.getHeight(),
CvType.CV_8UC1);
Utils.bitmapToMat(obtainedBitmap, mat);
/* convert to grayscale */
int colorChannels = (mat.channels() == 3) ? Imgproc.COLOR_BGR2GRAY : ((mat.channels() == 4) ? Imgproc.COLOR_BGRA2GRAY : 1);
Imgproc.cvtColor(mat, grayMat, colorChannels);
/* reduce the noise so we avoid false circle detection */
Imgproc.GaussianBlur(grayMat, grayMat, new Size(9, 9), 2, 2);
// accumulator value
double …Run Code Online (Sandbox Code Playgroud) android opencv image-processing hough-transform eye-detection
设定:
图片链接很抱歉,但是一张图片大约20MB,也不想丢失任何质量
图片样本:
https://drive.google.com/file/d/11PU-5fzvSJt1lKlmP-lQXhdsuCJPGKbN/view?usp=sharing https://drive.google.com/file/d/1B3lSFx8YvTYv3hzuuuYtphoHBuyEdc4o/view
案例:会有大小从5x5到10x10的不同形状的金属零件。在这些金属零件内部,有许多2至10〜的圆形孔,必须非常准确地检测到。孔的实际大小是未知的,因为可能的零件种类繁多。目的是使用OpenCV编写通用算法,该算法可与任何金属零件配合使用并检测圆形孔。
我们尝试过的方法:我们尝试使用HoughCircles算法检测孔,但几乎没有成功。该算法过于敏感,或者根本无法检测到孔。我们已经尝试了不同的param1和param2值,但没有成功。在使用HoughCircles之前,我们还尝试过使图像模糊并通过Canny,但是这种方法并未产生更好的结果。对于较低分辨率的图片,完全相同的算法效果更好。但是,不能牺牲分辨率,因为精度在此项目中极为重要。
https://drive.google.com/file/d/1TRdDbperi37bha0uJVALS4C2dBuaNz6u/view?usp=sharing
使用以下参数检测到上述圆圈:
minradius=0
maxradius=0
dp=1
param1=100
param2=21
Run Code Online (Sandbox Code Playgroud)
通过使用以上参数,我们几乎可以获得所需的结果。当我们对不同的图片使用相同的参数时,就会出现问题。
我们想要得到的最终结果是给定圆的直径具有很高的精度,并且我们希望在不同的零件图片上可以使用相同的算法
使这个问题与其他发布的问题不同的原因是,我们不知道给定圆的近似半径(因此我们无法操纵minradius,maxradius,param1,param2或任何其他值)。
python opencv image-processing computer-vision hough-transform
我试图找到下图中的所有多边形(包括填充的多边形)。目前,我正在尝试使用Hough Transform来完成此操作,但它没有检测到图像中的所有线条。此外,由于线条有多宽,它会将每条线条计数两次。有没有办法对图像应用一些过滤器以使霍夫变换性能更好,或者是否有一种完全不同的方法来找到我丢失的多边形?谢谢!
这是我正在处理的图片,

我的代码如下。
import cv2
import numpy as np
img = cv2.imread('test.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for num in range (0, len(lines)):
for x1,y1,x2,y2 in lines[num]:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imwrite('houghlines.jpg',img)
Run Code Online (Sandbox Code Playgroud) python opencv computer-vision hough-transform canny-operator
我在OpenCV中使用拉普拉斯变换进行边缘检测,然后使用霍夫线变换检测其中的线.这些识别的线最终需要从图像中移除.
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('Feb_16-0.jpg',0)
kernel = np.ones((1,1),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
blur = cv2.GaussianBlur(opening,(1,1),0)
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
laplacian = cv2.Laplacian(th4,cv2.CV_8UC1)
cst = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(laplacian,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imwrite('houghlines5.jpg',cst)
Run Code Online (Sandbox Code Playgroud)
拉普拉斯边缘检测的结果如下:
而Hough Line Transform返回的结果只标识了下图中绿线所标记的一条线:

任何人都可以帮我弄清楚代码中需要进行哪些修改,以便识别出互联网法案的所有大胆的横向/纵向线?
python opencv image-processing computer-vision hough-transform