标签: hough-transform

用于寻找曲线段的霍夫变换

霍夫变换可用于从图像中提取线条.它也可以用来提取曲线 - 这有点困难,因为更高维度的Hough变换是资源消耗.我想知道如何将Hough变换限制为2阶投票空间的3阶曲线,即x ^ {3} + ax ^ {2} + bx + c?

任何人都知道任何好的网站解释这个(似乎找不到任何).或者在这里解释如果没有一个:).

math computer-vision hough-transform

7
推荐指数
1
解决办法
4589
查看次数

OpenCV:使用霍夫圆变换来检测虹膜

我是openCV的新手,但我想创建虹膜识别程序.虽然带网络摄像头的系统可以检测到眼睛,但是它不能检测到圆形虹膜.我正在使用Hough Circle Transformation.但是如果图像中的光圈不够圆,系统就无法检测到它.有什么解决方案吗?

使用的算法是霍夫圆变换.

IplImage *capturedImg = cvLoadImage("circle.jpg",1);
IplImage *grayscaleImg = cvCreateImage(cvGetSize(capturedImg), 8, 1);

cvCvtColor(capturedImg, grayscaleImg, CV_BGR2GRAY);

// Gaussian filter for less noise
cvSmooth(grayscaleImg, grayscaleImg, CV_GAUSSIAN,9, 9 );

//Detect the circles in the image
CvSeq* circles = cvHoughCircles(grayscaleImg,
                         storage,
                         CV_HOUGH_GRADIENT,
                         2,
                         grayscaleImg->height/4,
                         200,
                     100 );

for (i = 0; i < circles->total; i++) 
{
     float* p = (float*)cvGetSeqElem( circles, i );
     cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])), 
        3, CV_RGB(0,255,0), -1, 8, 0 );
     cvCircle( capturedImg, cvPoint(cvRound(p[0]),cvRound(p[1])), 
         cvRound(p[2]), CV_RGB(0,0,255), 3, 8, 0 );
} …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing hough-transform iris-recognition

7
推荐指数
1
解决办法
1万
查看次数

OpenCV:阻止HoughCircles方法使用Canny Detection

我正在使用HoughCircles实时检测球,但在我的灰度图像流上运行Canny并不能创建所有边缘.为了解决这个问题,我将rgb图像拆分为单独的通道,在每个通道上执行Canny,然后使用按位或将边合并在一起.这非常有效,但是如果我将该边缘图像提供给HoughCircles,它将在边缘图像上再次执行Canny.有没有办法防止这种情况,或者放弃我正在执行的rgb拆分Canny检测,同时仍能捕获所有边缘?

c++ opencv object-detection edge-detection hough-transform

7
推荐指数
1
解决办法
4304
查看次数

用于OpenCV中虹膜检测的霍夫变换

我为hough转换编写了代码,效果很好.我也可以裁剪一张脸的眼睛位置.现在我想通过应用Hough变换(cvHoughCircle)来检测裁剪图像的光圈.但是,当我尝试此过程时,系统无法在图像上找到任何圆圈.

也许,原因是,图像中有噪音,但我不认为这是原因.那么,我该如何检测虹膜呢?我有二进制阈值的代码也许我可以使用它,但我不知道怎么办?

如果有人帮助我真的很感激.谢谢 :)

opencv image-processing computer-vision eye-tracking hough-transform

6
推荐指数
1
解决办法
6152
查看次数

如何将坐标从霍夫变换(rho,theta)转换回图像(x,y)?

我有一个通过在 Opencv 中调用霍夫变换函数产生的线向量,需要将它们转换回图像坐标。我从Opencv的官方文档中找到了这段示例代码,但我不明白。请问有人解释一下吗?

for( size_t i = 0; i < lines->size(); i++ )
{
    float rho = lines->at(i)[0]; //[0] is rho
    float theta = lines->at(i)[1]; //[1] is theta
    double a = cos(theta), b = sin(theta);
    double x0 = a*rho, y0 = b*rho;
    cv::Point pt1(cvRound(x0 + 1000*(-b)),
              cvRound(y0 + 1000*(a)));
    cv::Point pt2(cvRound(x0 - 1000*(-b)),
              cvRound(y0 - 1000*(a)));
    line( *mat, pt1, pt2, Scalar(255,0,0), 1, 8 );
}
Run Code Online (Sandbox Code Playgroud)

1000在做这条线是什么?

pt1(cvRound(x0 + 1000*(-b)), cvRound(y0 + 1000*(a)))
Run Code Online (Sandbox Code Playgroud)

此外,为什么 pt2 有负 y 线?例如,如果我的第一行是 (rho, theta) 格式的 …

opencv hough-transform

6
推荐指数
1
解决办法
5498
查看次数

HoughlinesP参数"threshold"和"minLineLength"

我在OpenCV中使用HoughLinesP函数.在阅读了这里的文档之后,我对两个参数"threshold"和"minLineLength"的必要性感到困惑.文件说:

threshold - 累加器阈值参数.只返回获得足够票数(>阈值)的那些行.

minLineLength - 最小行长度.短于此的线段被拒绝.

他们中的一个不是多余的吗?一行得到的投票数是否等于它包含的像素数?鉴于"minLineLength"指定要拒绝哪些行,"阈值"的用途是什么?我在这里错过了一些东西.将予以澄清澄清.

opencv image-processing hough-transform

6
推荐指数
1
解决办法
4601
查看次数

Opencv:霍夫线没有显示

所以我试图在棋盘上获得hough线,但算法只能检测到一条线.我正在使用python 2.7和opencv 3.0.这是代码:

def applyHoughLineTransform():
    image1 = cv2.imread('pictures/board1.png',0)
    image2 = cv2.imread('pictures/board2.png',0)
    image3 = cv2.imread('pictures/board3.png')
    image4 = cv2.imread('pictures/board4.png')

    lines1 = cv2.HoughLines(image1,1,math.pi/180.0,5)
    lines2 = cv2.HoughLines(image2,1,math.pi/180.0,5)

    lines1 = lines1[0]
    lines2 = lines2[0]

    for rho,theta in lines1:
        print ('Rho and theta:',rho,theta)
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))

        print (x1,y1)
        print (x2,y2)

        cv2.line(image3,(x1,y1),(x2,y2),(0,0,255),2)

    for rho,theta in lines2:
        a = …
Run Code Online (Sandbox Code Playgroud)

python opencv hough-transform opencv3.0

6
推荐指数
2
解决办法
3786
查看次数

寻找不同的苹果图片图像分割方法

我有苹果片浸泡在碘溶液中的照片。目标是将苹果分成各个感兴趣的区域并评估每个区域的淀粉含量。这是一个学校项目,所以我的目标是测试不同的分割方法,客观地找到最佳解决方案,无论是单一技术还是多种技术的组合。

问题是到目前为止我只接近一种方法。该方法正在使用 HoughCircles。我最初计划使用分水岭方法、形态学操作或简单的阈值。当我无法修改它们中的任何一个来工作时,这个计划失败了。

原始图像看起来与此类似,苹果的深浅不一

原始图像看起来与此类似,苹果的深浅不一

我尝试使用带有 HSV 值的 cv2.inRange 删除背景托盘,但它不适用于较深的苹果。

这就是 HoughCircles 在原始图像上产生的结果,应用了灰度和中值模糊,还尝试了托盘的蒙版。

这就是 HoughCircles 在原始图像上产生的结果,应用了灰度和中值模糊,还尝试了托盘的蒙版。

任何关于下一步去哪里的建议或方向将不胜感激。如果有帮助,我可以提供我正在使用的代码。

谢谢!

编辑 1:添加一些代码并澄清问题

感谢您的回复。我真正的问题是,这种情况下还有其他适合的分割方法吗?我想尝试几种不同的方法并比较大量照片的结果。我接下来要尝试的是使用 k-means 分割。此外,我将在下面添加一些代码以显示到目前为止我已经尝试过的内容。

HSV 颜色过滤

import cv2
import numpy as np

# Load image
image = cv2.imread('ApplePic.jpg')

# Set minimum and max HSV values to display
lower = np.array([0, 0, 0])
upper = np.array([105, 200, 255])

# Create HSV Image and threshold into a range.
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower, upper)
maskedImage = cv2.bitwise_and(image, image, mask=mask)

# Show Image
cv2.imshow('HSV Mask', …
Run Code Online (Sandbox Code Playgroud)

python opencv computer-vision image-segmentation hough-transform

6
推荐指数
1
解决办法
239
查看次数

打开 CV 平凡圆检测——如何获得最小二乘法而不是轮廓?

我的目标是从显微镜准确测量孔的直径。工作流程是:拍摄图像、拟合过程、拟合、以像素为单位将半径转换为毫米、写入 csv

倾斜的霍夫圆

这是用于测量孔直径的图像处理脚本的输出。我遇到了一个问题,我的圆拟合似乎优先匹配轮廓而不是最小二乘法之类的方法。

我或者在这样的事情中平均了许多拟合:

许多适合平均

我的问题是我喜欢快速扫描以确保圆形适合。权衡是我拥有的合身越多,合身就越真实,我拥有的越少,就越容易确保数字正确。我的圈子并不总是像这个圈子那样漂亮和圆,所以这对我很重要。

如果您能看一下并告诉我如何在 5 个圆的数量级上执行更多的最小二乘法,这是我的脚本拟合圆。我不想使用最小圆检测,因为流体正在流过这个孔,所以我希望它更像一个水力直径——谢谢!

(thresh, blackAndWhiteImage0) = cv2.threshold(img0, 100, 255, cv2.THRESH_BINARY) #make black + white 
median0 = cv2.medianBlur(blackAndWhiteImage0, 151) #get rid of noise 
circles0 = cv2.HoughCircles(median0,cv2.HOUGH_GRADIENT,1,minDist=5,param1= 25, param2=10, minRadius=min_radius_small,maxRadius=max_radius_small) #fit circles to image
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing hough-transform

6
推荐指数
1
解决办法
1210
查看次数

从紧密耦合的线和噪声曲线中找到直线

我有这张林线作物的图像。我需要找到作物对齐的大致方向。我试图获取图像的霍夫线,然后找到角度分布的模式。树木作物线

我一直在关注关于裁剪线的教程,但是在该教程中,裁剪线很稀疏。这里它们是密集的,经过灰度、模糊和使用精明的边缘检测后,这就是我得到的

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('drive/MyDrive/tree/sample.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
gauss = cv2.GaussianBlur(gray, (3,3), 3)

plt.figure(figsize=(15,15))
plt.subplot(1,2,1)
plt.imshow(gauss)

gscale = cv2.Canny(gauss, 80, 140)
plt.subplot(1,2,2)
plt.imshow(gscale)
plt.show()
Run Code Online (Sandbox Code Playgroud)

(左侧未经canny处理的模糊图像,左侧经过canny预处理的图像) 预处理图像

之后,我按照教程将预处理后的图像“骨架化”

size = np.size(gscale)

skel = np.zeros(gscale.shape, np.uint8)

ret, gscale = cv2.threshold(gscale, 128, 255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3))
done = False

while not done:
  eroded = cv2.erode(gscale, element)
  temp = cv2.dilate(eroded, element)
  temp = cv2.subtract(gscale, temp)
  skel = cv2.bitwise_or(skel, temp)
  gscale = …
Run Code Online (Sandbox Code Playgroud)

python opencv numpy hough-transform

6
推荐指数
1
解决办法
158
查看次数