我试图训练haar cascade分类器进行卡套检测(没有旋转,图像没有失真)
例如,我有文件Clubs.png,内容俱乐部图像在白色背景20x20像素
这个教程非常混乱 http://note.sonots.com/SciSoftware/haartraining.html
我的图像只有大小,没有扭曲或角度变化.
我必须输入哪些命令才能获得Clubs.xml文件?
我正在尝试在我正在处理的移动应用程序中实现一个复活节彩蛋.在摄像机视图中检测到徽标时,将触发这些复活节彩蛋.我试图检测的徽标就是这个:
.
我不太清楚解决这个问题的最佳方法是因为我对计算机视觉很陌生.我目前正在使用Canny算法找到水平边缘.然后我使用概率Hough变换找到线段.其输出如下(蓝线表示概率Hough变换检测到的线段):

我要采取的下一步是寻找一组大约24条线(拟合在一个近似正方形的矩形内),每条线的长度必须大致相同.我会用这两个信号来表示徽标的潜在存在.我意识到这可能是一种非常天真的方法,并欢迎有关如何以更可靠的方式更好地检测此徽标的建议?
谢谢
我一直在使用不同的数据聚类算法来处理代表节点的随机数据点之间的聚类,我一直在阅读数据聚类用于图像识别.我没有建立联系,聚类数据如何帮助识别图像或面部识别.有人能解释一下吗?
我想使用C#或其他.NET语言(如powershell)在屏幕上搜索图像.像我在文件系统中给出一个图像位置,代码将整个屏幕视为图像,并在大图像(屏幕)中搜索文件系统中的图像,然后返回屏幕上的图像位置.我在.net类中找不到这种东西.
谢谢.
你能帮我找到适合图像大小调整的算法吗?我有一个数字的图像.最大尺寸为200x200,我需要获得尺寸为15x15甚至更小的图像.图像是单色(黑白),结果应该相同.这是关于我的任务的信息.
我已经尝试过一种算法,就在这里
// xscale, yscale - decrease/increase rate
for (int f = 0; f<=49; f++)
{
for (int g = 0; g<=49; g++)//49+1 - final size
{
xpos = (int)f * xscale;
ypos = (int)g * yscale;
picture3[f][g]=picture4[xpos][ypos];
}
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于图像的减少,这是我之前的目标.你能帮我找一个可以解决这个问题的算法(质量一定不是完美的,速度甚至不重要).考虑到我是新手的事实,关于它的一些信息也是完美的.当然,一小段c/c ++代码(或库)也是完美的.
编辑:我找到了一个算法.它适合压缩200到20?
提前感谢您的帮助.
我有很多研发和搜索,但我找不到任何检测模糊图像的解决方案.
我使用过这个https://github.com/BloodAxe/OpenCV-Tutorial并使用拉普拉斯公式进行模糊检测,但无法在图像中获得模糊检测
- (void)checkForBurryImage:(UIImage*)image {
Run Code Online (Sandbox Code Playgroud)cv::Mat matImage = [image toMat]; cv::Mat matImageGrey; cv::cvtColor(matImage, matImageGrey, CV_BGRA2GRAY); cv::Mat dst2 =[image toMat]; cv::Mat laplacianImage; dst2.convertTo(laplacianImage, CV_8UC1); cv::Laplacian(matImageGrey, laplacianImage, CV_8U); cv::Mat laplacianImage8bit; laplacianImage.convertTo(laplacianImage8bit, CV_8UC1); //------------------------------------------------------------- //------------------------------------------------------------- unsigned char *pixels = laplacianImage8bit.data; //------------------------------------------------------------- //------------------------------------------------------------- // unsigned char *pixels = laplacianImage8bit.data; int maxLap = -16777216; for (int i = 0; i < ( laplacianImage8bit.elemSize()*laplacianImage8bit.total()); i++) { if (pixels[i] > maxLap) maxLap = pixels[i]; } int soglia = -6118750; printf("\n maxLap : %i",maxLap); if …
我试图通过使用NN和CNN对我自己和一些朋友写的手写数字进行分类.为了训练NN,使用MNIST数据集.问题是使用MNIST数据集训练的NN不能在我的数据集上给出令人满意的测试结果.我在Python和MATLAB上使用了一些库,具有不同的设置,如下所示.
在Python上我已经将这段代码用于设置;
它是用MNIST训练集训练的,测试结果如下:
MNIST上的测试结果=我自己的数据集上的96%测试结果= 80%
在MATLAB上我使用了深度学习工具箱,其中包含各种设置,归一化,与上面类似,NN的最佳精度约为75%.在MATLAB上使用NN和CNN.
我试图将自己的数据集类似于MNIST.以上结果从预处理数据集中收集.以下是应用于我的数据集的预处理:
我不知道该怎么做.仍存在一些差异,如对比度等,但对比度增强试验无法提高准确性.
这是来自MNIST和我自己的数据集的一些数字,用于直观地比较它们.


正如您所看到的,存在明显的对比差异.我认为准确性问题是由于MNIST和我自己的数据集之间缺乏相似性.我该如何处理这个问题?
有一个类似的问题在这里,但他的数据集是印刷数字集合,而不是像我一样.
编辑:我还测试了我自己的数据集的二进制化版本,该数据集是在使用二进制化MNIST和默认MNIST进行训练的NN上进行的.二值化阈值为0.05.
这是分别来自MNIST数据集和我自己的数据集的矩阵形式的示例图像.他们两个都是5.
MNIST:
Columns 1 through 10
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的图像,其中包含一些形状:一些矩形和一些椭圆形,总共 4 或 5 个。形状可以旋转、缩放和重叠。有一个示例输入:
我的任务是检测所有这些图形并准备一些有关它们的信息:大小、位置、旋转等。在我看来,核心问题是形状可以相互重叠。我尝试搜索一些有关此类问题的信息,发现 OpenCV 库非常有用。
OpenCV 能够检测轮廓,然后尝试将椭圆或矩形拟合到这些轮廓。问题是当形状重叠时,轮廓会混淆。
我考虑以下算法:检测所有特征点:并在它们上面放置白点。我得到了类似的东西,其中每个数字都分为不同的部分:
然后我可以尝试使用一些信息链接这些部分,例如复杂度值(我将曲线 approxPolyDP 拟合到轮廓并读取它有多少个部分)。但这开始变得非常困难。另一个想法是尝试连接轮廓的所有排列并尝试使图形适合它们。将输出最好的编译。
有什么想法如何创建简单但优雅的解决方案吗?
我正在尝试将稍微不规则的形状与形状数据库相匹配。例如,这里我试图匹配的轮廓:
有关更多信息,这是 HDMI 连接器的轮廓,表示为轮廓。有点粗糙,因为这是在拿着 HDMI 的情况下用手机拍摄的。
这是我的连接器数据库:
这些更清晰,因为这些是从互联网连接器图像中收集的轮廓。
对于我尝试过的:
cv2.matchShapes()
由于这些都只是轮廓,我尝试直接使用 matchShapes() 方法进行比较,但未能产生良好的结果。不规则轮廓和我的数据库之间的相似之处是:
HDMI:0.90
DB25:0.84
5 针 DIN:0.5
DVI:0.21
由于轮廓越相似,匹配结果越接近 0,算法完全失败。我通过更改第三个参数尝试了其他匹配方法,但仍然不成功。
球体:
与SIFT类似,我尝试了关键点匹配。平均我数据库中不同匹配项之间的距离(在找到前 15% 的匹配项之后):
mean([m.distance for m in matches])
Run Code Online (Sandbox Code Playgroud)
距离如下:
五针DIN:7.6
DB25:11.7
DVI:12.1
HDMI:19.6
由于这将圆形归类为最像我的轮廓的形状,因此这也失败了。
以下是实际 HDMI 插槽与我的示例 HDMI 插槽的 ORB 匹配的关键点,以获取更多信息:

我应该尝试任何想法/其他算法吗?或者 CNN 是我唯一的选择(我宁愿避免,因为我没有适当数量的数据)。
python opencv image-processing image-recognition opencv-contour
在训练用于图像分类的 keras 模型(来自 DOG BREED IDENTIFICATION 数据集的 120 个类,KAGGLE)时,我需要使用我在某处读到的类权重来平衡类,在示例中我看到人们使用 fit_generator 的参数 class_weight。但我在 model.compile 中发现了另一个参数,weighted_metrics,其在文档中的描述是:“在训练和测试期间由sample_weight或class_weight评估和加权的指标列表”。我要用这个吗?请用任何示例解释此参数的用途。
#Calculating Class weights
counter = Counter(train_generator.classes)
max_value = float(max(counter.values()))
CLASS_WEIGHTS = {classid: max_value / num_occurences
for classid, num_occurences in counter.items()}
# Model Compile
model.compile(optimizer=Adam(lr=LR),
loss=categorical_crossentropy,
metrics=[categorical_accuracy],
weighted_metrics=None) # <--------------- This parameter
STEPS_PER_EPOCH = train_generator.n//train_generator.batch_size
VAL_STEPS = val_generator.n//val_generator.batch_size
model.fit_generator(train_generator,
steps_per_epoch=STEPS_PER_EPOCH,
epochs=EPOCHS,
callbacks=callback_list,
verbose=1,
class_weight=CLASS_WEIGHTS,
validation_data=val_generator,
validation_steps=VAL_STEPS) # USED CLASS_WEIGHTS HERE
Run Code Online (Sandbox Code Playgroud)