当前位置: 首页 > 面试题库 >

Hough circle检测精度非常低

郑燕七
2023-03-14
问题内容

我正在尝试从看起来具有
很好清晰度的图像中检测出圆形。我确实意识到圈子的一部分丢失了,但是从
我读到的有关霍夫变换的内容来看,这似乎并不会
导致我遇到的问题。

Code:

// Read the image
Mat src = Highgui.imread("input.png");

// Convert it to gray
Mat src_gray = new Mat();
Imgproc.cvtColor(src, src_gray, Imgproc.COLOR_BGR2GRAY);

// Reduce the noise so we avoid false circle detection
//Imgproc.GaussianBlur( src_gray, src_gray, new Size(9, 9), 2, 2 );

Mat circles = new Mat();

/// Apply the Hough Transform to find the circles
Imgproc.HoughCircles(src_gray, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 160, 25, 0, 0);

// Draw the circles detected
for( int i = 0; i < circles.cols(); i++ ) {
    double[] vCircle = circles.get(0, i);

    Point center = new Point(vCircle[0], vCircle[1]);
    int radius = (int) Math.round(vCircle[2]);

    // circle center
    Core.circle(src, center, 3, new Scalar(0, 255, 0), -1, 8, 0);
    // circle outline
    Core.circle(src, center, radius, new Scalar(0, 0, 255), 3, 8, 0);
}

// Save the visualized detection.
String filename = "output.png";
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, src);

我把高斯模糊注释掉了,因为(直觉上反),这
极大地增加了发现同样不准确的圆的数量。

我的输入图像有什么问题会导致Hough无法正常工作
吗?我的参数有问题吗?

编辑:第一个答案带来了一个关于
霍夫最小/最大半径提示的好点。我拒绝添加这些参数,因为本文中的示例图像
只是半径从20到几乎
无限变化的数千幅图像之一。


问题答案:

如果您正确设置minRadius和设置maxRadius参数,它将为您带来
良好的效果。

对于您的图片,我尝试了以下参数。

method - CV_HOUGH_GRADIENT
minDist - 100
dp - 1
param1 - 80
param2 - 10
minRadius - 250
maxRadius - 300

注意:我在C ++中尝试过此操作。



 类似资料:
  • 我想创建一个预测年龄和性别的模型,并将其集成到Android应用程序中。 我在Ubuntu 16上使用Python 3.6,Tensorflow 1.13.1和Keras 2.2.4。 首先,我用IMDB数据集训练不同的模型:keras的Mobilenet V1和V2,以及我自己编写的VGG。对于这两个MobileNet,我使用imagenet权重来初始化模型。 准确率相当高,性别的准确率超过90

  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10

  • 刚从ML开始,创建了我的第一个CNN来检测人脸图像的方位。我得到的训练和测试精度高达约96-99%超过2组不同的1000张图片(128x128RGB)。然而,当我自行从测试集中预测一个图像时,模型很少预测正确。我认为在测试和预测期间,我将数据加载到模型中的方式肯定有区别。下面是我如何将数据加载到模型中进行训练和测试: 下面是我如何加载图像来进行预测: ImageDataGenerator处理图像的

  • 在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了

  • 问题内容: 文档的内容如下(强调我的意思)。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(也许是将来的时间,因此值可能为负)。 此方法提供纳秒精度,但不一定提供纳秒精度。 无法保证值更改的频率。 如我所见,这可以用两种不同的方式解释: 在句子中 大胆 上面是指个人的返回值。然后,将在数字意义上理解精度和准确性。也就是说,精度是指有效

  • 我的游戏有两个职业,它们都产生精灵,唯一的区别是它们的精灵向不同的方向移动。 然而,我如何检测另一个类的精灵是否与这个类碰撞,两个类都产生了很多精灵。我的想法是也使用池为每个精灵创建一个矩形。