小编May*_*tro的帖子

检测图像opencv中的对象区域

我们目前正在尝试使用OpenCV,C++版本中提供的方法检测医疗器械图像中的对象区域.示例图像如下所示: 1

以下是我们遵循的步骤:

  • 将图像转换为灰度
  • 应用中值滤波器
  • 使用sobel滤波器查找边缘
  • 使用阈值25将结果转换为二进制图像
  • 对图像进行骨架化以确保我们有清晰的边缘
  • 寻找X最大的连通组件

这种方法适用于图像1,结果如下:

1-结果

  • 黄色边框是检测到的连接组件.
  • 矩形只是为了突出显示连接组件的存在.
  • 为了获得可理解的结果,我们只删除了完全在另一个内部的连接组件,因此最终结果是这样的:

1-endResult

到目前为止,一切都很好,但另一个图像样本使我们的工作复杂化如下所示. 2

在物体下面放一条浅绿色毛巾会产生这样的图像:

2-结果

像我们之前那样过滤了区域后,我们得到了这个:

2- endresult

显然,这不是我们需要的......我们除了这样的东西:

2- ExpectedResult

我正在考虑聚集最近发现的连接组件(不知何故!!),这样我们可以最大限度地减少毛巾存在的影响,但是不知道它是否可行,或者之前有人试过这样的东西?此外,有没有人有更好的想法来克服这种问题?

提前致谢.

opencv cluster-analysis object-detection connected-components

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

光流忽略稀疏运动

我们实际上正在进行一个图像分析项目,我们需要识别在场景中消失/出现的对象.这是2张图片,一张是在外科医生采取行动之前拍摄的,另一张是之后拍摄的.

之前: 在此输入图像描述 后: 在此输入图像描述

首先,我们只是计算了两个图像之间的差异,这里是结果(请注意,Mat为了获得更好的图像,我在结果中添加了128个):

(之后 - 之前)+ 128 在此输入图像描述

目标是检测杯子(红色箭头)已从场景中消失并且注射器(黑色箭头)已进入场景,换句话说,我们应该仅检测与场景中左/进入的对象相对应的区域.此外,很明显,场景左上角的对象从初始位置稍微偏移了一点.我想过,Optical flow所以我常常OpenCV C++计算Farneback的一个,以便看看它是否足够我们的情况,这是我们得到的结果,接着是我们写的代码:

流: 在此输入图像描述

void drawOptFlowMap(const Mat& flow, Mat& cflowmap, int step, double, const Scalar& color)
{
    cout << flow.channels() << " / " << flow.rows << " / " << flow.cols << endl;
    for(int y = 0; y < cflowmap.rows; y += step)
        for(int x = 0; x < cflowmap.cols; x += step)
        {
            const Point2f& fxy = flow.at<Point2f>(y, x);
            line(cflowmap, Point(x,y), Point(cvRound(x+fxy.x), cvRound(y+fxy.y)), color); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv motion-detection opticalflow

18
推荐指数
1
解决办法
1389
查看次数

ios app谷歌分析中的年龄/性别数据

我已经将我的iOS应用程序与谷歌分析SDK集成,以跟踪应用程序上发生的一切,并获得它生成的有用报告.我启用了人口统计信息报告,让我看到使用该应用的年龄/性别,但我的问题是谷歌如何知道苹果设备上用户的年龄和性别.我假设在Android上他们可以知道一切,因为用户必须输入他的gmail帐户来管理他的手机,以便他们能够从他的帐户获取此信息,但苹果设备怎么样?他们如何知道这些信息?

我已经检查了这一点:在Google Analytics iOS SDK v3中设置用户性别和年龄, 但没有人回复.

编辑:我已启用人口统计和兴趣报告,我在报告部分没有看到与年龄和性别有关的任何内容!

google-analytics ios

11
推荐指数
1
解决办法
3864
查看次数

在ubuntu上包含nonfree openCV 2.4.10

我已经使用此链接在ubuntu上安装了OpenCV ,我正在尝试使用SURF描述符.我知道他们将这些类型的描述符的位置更改为非自由模块,因此我们需要包含它,这是这样的:#include "opencv2/nonfree/features2d.hpp".问题是我在编译时遇到这个错误:opencv2/nonfree/features2d.hpp no such file or directory.

知道怎么解决吗?

编辑: openCV的其他部分工作正常.我包括以下库,一切都很好看:

#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/legacy/legacy.hpp"
Run Code Online (Sandbox Code Playgroud)

我检查了我的OpenCV目录中的inlcude文件夹,并且存在nonfree文件夹.此外,它是我在QTCreator(我正在使用的环境)中无法访问的唯一库,因为我试图包含在Inlcude文件夹中找到的所有其他库,但它们看起来很好.

EDITED2: 您可以看到我make VERBOSE=1在此链接上运行时看到的内容的屏幕截图

所以不确定在哪里看?实际上,我没有在../usr/include/opencv2/中找到nonfree文件夹

谢谢.

ubuntu opencv surf

11
推荐指数
2
解决办法
3万
查看次数

生成器和序列之间的Keras差异

我正在使用一个深层的CNN + LSTM网络对一维信号的数据集进行分类。我使用的keras 2.2.4后盾tensorflow 1.12.0。由于我的数据集很大且资源有限,因此我在训练阶段使用了生成器将数据加载到内存中。首先,我尝试了这个生成器:

def data_generator(batch_size, preproc, type, x, y):
    num_examples = len(x)
    examples = zip(x, y)
    examples = sorted(examples, key = lambda x: x[0].shape[0])
    end = num_examples - batch_size + 1
    batches = [examples[i:i + batch_size] for i in range(0, end, batch_size)]

    random.shuffle(batches)
    while True:
        for batch in batches:
            x, y = zip(*batch)
            yield preproc.process(x, y)
Run Code Online (Sandbox Code Playgroud)

使用上述方法,我可以一次以最多30个样本的小批量启动训练。但是,这种方法不能保证网络每个时期每个样本仅训练一次。考虑来自Keras网站的评论:

Sequence是进行多处理的更安全方法。这种结构保证了网络在每个时期的每个样本上只会训练一次,而生成器则不会。

我尝试了使用以下类加载数据的另一种方式:

class Data_Gen(Sequence):

def __init__(self, batch_size, preproc, type, x_set, y_set):
    self.x, self.y = np.array(x_set), np.array(y_set) …
Run Code Online (Sandbox Code Playgroud)

python generator keras tensorflow

11
推荐指数
1
解决办法
549
查看次数

解释张量板图

我仍然是新手,tensorflow我正在努力了解在我的模特训练继续进行时细节上发生了什么.简单地说,我使用的是slim预训练的模型ImageNetfinetuning我的数据集.以下是从张量板中提取的2个独立模型的一些图:

Model_1 (InceptionResnet_V2)
Run Code Online (Sandbox Code Playgroud)

初始resnet V2

Model_2 (InceptionV4)
Run Code Online (Sandbox Code Playgroud)

InceptionV4

到目前为止,两种模型在验证集上的结果都很差(平均Az(ROC曲线下的面积)= 0.7,而Model_10.79为Model_2).我对这些图的解释是,重量不会随着小批量而变化.它只是改变迷你批次的偏见,这可能是问题所在.但我不知道在哪里验证这一点.这是我能想到的唯一解释,但考虑到我还是新手,这可能是错误的.你能和我分享一下你的想法吗?如有需要,请不要犹豫,要求更多地块.

编辑: 正如您在下面的图表中看到的那样,权重似乎随着时间的推移几乎没有变化.这适用于两个网络的所有其他权重.这让我认为某处存在问题,但不知道如何解释它.

InceptionV4 weights
Run Code Online (Sandbox Code Playgroud)

InceptionV4重量

InceptionResnetV2 weights
Run Code Online (Sandbox Code Playgroud)

InceptionResnetV2权重

EDIT2: 这些模型首先在ImageNet上训练,这些图是在我的数据集上微调它们的结果.我正在使用19个类的数据集,其中包含大约800000个图像.我正在做一个多标签分类问题,我正在使用sigmoid_crossentropy作为丢失函数.这些课程非常不平衡.在下表中,我们显示了2个子集中每个类的存在百分比(训练,验证):

Objects     train       validation
obj_1       3.9832 %    0.0000 %
obj_2       70.6678 %   33.3253 %
obj_3       89.9084 %   98.5371 %
obj_4       85.6781 %   81.4631 %
obj_5       92.7638 %   71.4327 %
obj_6       99.9690 %   100.0000 %
obj_7       90.5899 %   96.1605 %
obj_8       77.1223 %   91.8368 %
obj_9       94.6200 %   98.8323 %
obj_10      88.2051 %   95.0989 % …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tensorboard tensorflow-slim

10
推荐指数
1
解决办法
994
查看次数

使用混淆矩阵理解多标签分类器

我有一个包含 12 个类的多标签分类问题。我使用slimTensorflow训练使用预训练的模型模型ImageNet。以下是训练和验证中每个类别的存在百分比

            Training     Validation
  class0      44.4          25
  class1      55.6          50
  class2      50            25
  class3      55.6          50
  class4      44.4          50
  class5      50            75
  class6      50            75
  class7      55.6          50
  class8      88.9          50
  class9     88.9           50
  class10     50            25
  class11     72.2          25
Run Code Online (Sandbox Code Playgroud)

问题是模型没有收敛,并且验证集上的ROC曲线 ( Az) 的下限很差,例如:

               Az 
  class0      0.99
  class1      0.44
  class2      0.96  
  class3      0.9
  class4      0.99
  class5      0.01
  class6      0.52
  class7      0.65
  class8      0.97
  class9     0.82
  class10     0.09
  class11     0.5
  Average …
Run Code Online (Sandbox Code Playgroud)

python machine-learning confusion-matrix deep-learning tensorflow

8
推荐指数
1
解决办法
8826
查看次数

找到最大值matlab的所有索引

我只是想在matlab中找到一个向量中最大值的所有索引.max函数仅返回最大值的第一个出现的索引.例如:

maxChaqueCell = [4     5     5     4]
[maximum, indicesDesMax] = max(maxChaqueCell)
 maximum =

         5
 indicesDesMax =

         2
Run Code Online (Sandbox Code Playgroud)

我需要indicesDesMax有2和3这是我们所拥有的两个5的指数,maxChaqueCell我该怎么做?

谢谢.

matlab max

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

重新启动InceptionV4的新类别的最终层:未初始化的局部变量

我仍然是张量流的新手,所以如果这是一个天真的问题,我很抱歉.我正在尝试使用此网站上发布的数据集上inception_V4 预先训练模型.此外,我正在使用他们的网络,我的意思是在他们的网站上发布的网络.ImageNet

以下是我如何称呼网络:

def network(images_op, keep_prob):

     width_needed_InceptionV4Net = 342
     shape = images_op.get_shape().as_list()
     H = int(round(width_needed_InceptionV4Net * shape[1] / shape[2], 2))
     resized_images = tf.image.resize_images(images_op, [width_needed_InceptionV4Net, H], tf.image.ResizeMethod.BILINEAR)

     with slim.arg_scope(inception.inception_v4_arg_scope()):
         logits, _ = inception.inception_v4(resized_images, num_classes=20, is_training=True, dropout_keep_prob = keep_prob)

     return logits
Run Code Online (Sandbox Code Playgroud)

由于我需要重新训练Inception_V4我的类别的最后一层,我将类的数量修改为20,如方法call(inception.inception_v4)中所示.

这是我到目前为止的火车方法:

def optimistic_restore(session, save_file, flags):
reader = tf.train.NewCheckpointReader(save_file)
saved_shapes = reader.get_variable_to_shape_map()
var_names = sorted([(var.name, var.name.split(':')[0]) for var in tf.global_variables()
        if var.name.split(':')[0] in saved_shapes])
restore_vars = []
name2var …
Run Code Online (Sandbox Code Playgroud)

python tensorflow tensorflow-gpu

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

将白色转换为黑色uiimage

我有以下UIImage:

在此输入图像描述

使用Objective-C,我希望能够将白色反转为黑色,反之亦然.

任何帮助,将不胜感激.

uiimage invert ios

6
推荐指数
3
解决办法
4519
查看次数