我是图像处理的新手,我想在对象检测中做一个项目.所以通过建议这个项目的分步过程来帮助我.感谢名单.
我一直在使用EMGU CV库中的SURF特征检测示例.
到目前为止它的工作令人惊讶; 我可以检测到2个给定图像之间的匹配对象,但是我遇到了关于图像不匹配的问题.
我一直在寻找论坛的支持,但他们从我所处的地方开始.有谁知道哪些参数决定图像是否匹配.当我使用不匹配的2张图像进行测试时,代码仍会像匹配一样进行,并且即使没有匹配也会在图像的随机位置绘制模糊的粗红线.
如果没有匹配,我希望打破代码,不再继续.
附录:
static void Run()
{
Image<Gray, Byte> modelImage = new Image<Gray, byte>("HatersGonnaHate.png");
Image<Gray, Byte> observedImage = new Image<Gray, byte>("box_in_scene.png");
Stopwatch watch;
HomographyMatrix homography = null;
SURFDetector surfCPU = new SURFDetector(500, false);
VectorOfKeyPoint modelKeyPoints;
VectorOfKeyPoint observedKeyPoints;
Matrix<int> indices;
Matrix<float> dist;
Matrix<byte> mask;
if (GpuInvoke.HasCuda)
{
GpuSURFDetector surfGPU = new GpuSURFDetector(surfCPU.SURFParams, 0.01f);
using (GpuImage<Gray, Byte> gpuModelImage = new GpuImage<Gray, byte>(modelImage))
//extract features from the object image
using (GpuMat<float> gpuModelKeyPoints = surfGPU.DetectKeyPointsRaw(gpuModelImage, null))
using (GpuMat<float> gpuModelDescriptors = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我使用SIFT + RANSAC和Homography来查找对象(OpenCV C++,Java).我面临的问题是,在有很多异常值的情况下,RANSAC表现不佳.
出于这个原因,我想尝试一下SIFT的作者所说的非常好:投票.
我已经读过我们应该在4维特征空间中投票,其中4个维度是:
虽然使用opencv很容易获得匹配scale并且orientation:
cv::Keypoints.octave
cv::Keypoints.angle
Run Code Online (Sandbox Code Playgroud)
我很难理解如何计算位置.
我找到了一个有趣的幻灯片,只有one match我们能够绘制一个边界框:

但我不知道如何只用一场比赛就可以画出那个边界框.有帮助吗?
我需要一个工具来用矩形边界框注释图像.输出将采用pascal voc xml格式.注释和图像将成为卷积神经网络用于对象检测的训练数据集的一部分.我将自己手动注释图像.
我考虑过以下工具,但它们不支持pascal-voc.
有没有一个注释工具可以节省我的时间?
machine-learning image-processing object-detection computer-vision
我试图运行object_detection.ipynb类型程序,但它是一个普通的python程序(.py).它工作得很好,但在..models/research/object_detection文件夹内运行时,但主要问题是当我试图在另一个目录中运行此代码时sys.append,我最终得到以下错误:
Traceback(最近一次调用最后一次):
文件"obj_detect.py",第20行,in
Run Code Online (Sandbox Code Playgroud)from utils import label_map_utilImportError:没有名为utils的模块
如果我尝试将文件从..models/research/object_detection文件夹导入到不同目录中的python程序中,那么我最终会得到更多错误,如下所示:
Traceback(最近一次调用最后一次):
文件"classify_image.py",第10行,in
Run Code Online (Sandbox Code Playgroud)import object_dt文件"/home/saikishor/Tensorflow_Models/models/research/object_detection/object_dt.py",第18行,in
Run Code Online (Sandbox Code Playgroud)from utils import label_map_util文件"/home/saikishor/Tensorflow_Models/models/research/object_detection/utils/label_map_util.py",第22行,in
Run Code Online (Sandbox Code Playgroud)from object_detection.protos import string_int_label_map_pb2ImportError:没有名为object_detection.protos的模块
如何解决这个问题?
当我运行这个:
protoc --python_out=. .\object_detection\protos\anchor_generator.proto
Run Code Online (Sandbox Code Playgroud)
在命令行上的 tensorflow 对象检测文件上,我得到:
'protoc' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
我按照protoc object_detection/protos/*.proto: No such file or directory 中的所有说明进行操作,但它们从来没有为我工作过
除了我进行的搜索之外,我还尝试了以下命令:
py-3.6 -m pip install protobuf
Run Code Online (Sandbox Code Playgroud)
它对我有用。
我再次输入命令
python_out=. .\object_detection\protos\anchor_generator.proto
Run Code Online (Sandbox Code Playgroud)
但它仍然失败,这是:
C:\Users\laptop market\Downloads\bin\protoc object_detection/protos/*.proto --py_out=.
Run Code Online (Sandbox Code Playgroud)
也失败了。
我正在使用 YOLOv3 来检测视频中的汽车。我下载我的代码中使用了三个文件coco.names,yolov3.cfg并且yolov3.weights被培养为80个不同类别的对象被检测到。代码工作但非常慢,每帧需要超过 5 秒。我相信如果我减少类的数量,它会运行得更快。我可以从 中删除不必要的类coco.names,但不幸的是,我无法理解 中的所有内容yolov3.cfg,甚至无法阅读yolov3.weights. 本来想训练自己的模型,但是遇到了很多问题,所以放弃了这个想法。谁能帮我修改这些文件?
我关注了这个博客 --> https://medium.com/@teyou21/training-your-object-detection-model-on-tensorflow-part-2-e9e12714bdf,并构建了一个预先训练的 SSD Mobilenet 模型在名为“ssd_mobilenet_v2_quantized_coco”的 COCO 数据集上。
这里发生的事情是它完美地检测了我的新课程,但我也想包括预训练的课程。
我尝试将类数更改为 96(90 个预训练 + 6 个新),并使用 COCO 数据集中所有标签的名称和相应 id 编辑“labelmap.pbtxt”,最后从 ids 添加新类91 - 96。
它仍然只检测新类。
我应该怎么做才能检测到预训练的和新的类?
首先,对不起帖子的长度。
我正在开展一个项目,根据叶子的图像对植物进行分类。为了减少数据的方差,我需要旋转图像,以便茎在图像的底部水平对齐(270 度)。
到目前为止我在哪里...
到目前为止,我所做的是创建一个阈值图像,然后从那里找到轮廓并在对象周围绘制一个椭圆(在许多情况下,它无法涉及整个对象,因此省略了茎......),之后,我创建 4 个区域(带有椭圆的边缘)并尝试计算最小值区域,这是因为假设在任何一点都必须找到茎,因此它将是人口较少的区域(主要是因为它将被 0 包围),这显然不像我想的那样工作。
之后,我以两种不同的方式计算旋转角度,第一个涉及atan2函数,这只需要我想要移动的点(人口最少的区域的质心)以及 wherex=image width / 2和y = height。这种方法在某些情况下有效,但在大多数情况下,我没有得到所需的角度,有时需要一个负角度,它会产生一个正角度,最终茎在顶部。在其他一些情况下,它只是以一种可怕的方式失败。
我的第二种方法是尝试基于 3 个点计算角度:图像的中心、人口最少的区域的质心和 270º 点。然后使用一个arccos函数,并将其结果转换为度数。
这两种方法对我来说都失败了。
问题
这是一些示例和我得到的结果(二进制掩码)。矩形表示我正在比较的区域,椭圆上的红线是椭圆的主轴,粉红色圆圈是最小区域内的质心,红色圆圈表示 270º 参考点(角度) ,白点代表图像的中心。
我目前的解决方案
def brightness_distortion(I, mu, sigma):
return np.sum(I*mu/sigma**2, axis=-1) / np.sum((mu/sigma)**2, axis=-1)
def chromacity_distortion(I, mu, sigma):
alpha = brightness_distortion(I, mu, sigma)[...,None]
return np.sqrt(np.sum(((I - alpha * mu)/sigma)**2, axis=-1))
def bwareafilt ( image ):
image = image.astype(np.uint8)
nb_components, output, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=4) …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个数据集来训练 YOLOv4,并且我拥有 YOLO 格式的所有标签(我使用了 LabelImg)。现在我想使用相同的数据集训练 SSD,因此我需要 PASCAL VOC 格式的标签。我已经看到了一些进行相反转换(voc 到 yolo)的方法,但不是我正在寻找的方法。由于我有数千张图像,我想找到一种方法来自动化整个过程,而不必逐一检查每个图像/标签。
有谁对如何解决这个问题有任何想法?
提前致谢!
object-detection ×10
python ×4
opencv ×3
tensorflow ×3
emgucv ×2
yolo ×2
c# ×1
import ×1
label ×1
protoc ×1
python-2.7 ×1
sift ×1
surf ×1