小编Stu*_*PhD的帖子

改善哈里斯角探测器的效果

我一直在阅读有关特征检测的内容,并想尝试哈里斯角点检测器.我意识到这是通过打电话来实现的

void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType=BORDER_DEFAULT )

其中dst是每个像素包含角度强度的浮点图像.

我想看到它的工作,所以我想把它应用到下面的图片:

笔记本电脑的照片http://i49.tinypic.com/dbijh3.jpg

结果是:

未检测到角落http://i49.tinypic.com/jgtzqt.jpg

你可以告诉结果不好.它看起来它只是拾起噪音,甚至没有检测到主角.

这是我用来在图像上打印角落的代码,我使用阈值并为阈值设置任意值.

int _tmain(int argc, _TCHAR* argv[])
{

Mat img, dst, threshed;
img = imread("c:\\laptop.jpg",0);

dst = Mat::zeros(img.size(), CV_32FC1);

cornerHarris(img, dst, 2, 3, 0.04, BORDER_DEFAULT);



threshold(dst, threshed, 0.00001, 255, THRESH_BINARY_INV);

namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", threshed);
//imwrite("harris.jpg", threshed);
waitKey(0);

return 0;
Run Code Online (Sandbox Code Playgroud)

If I reduce threshold the result is white with just a few black dots (detections) Increasing threshold just produces a more …

opencv feature-detection

4
推荐指数
1
解决办法
7031
查看次数

如何有效地找到分类器的准确性

即使使用像最近邻居这样的简单分类器,我也无法判断其准确性,因而无法改善它.

例如,使用以下代码:

IDX = knnsearch(train_image_feats, test_image_feats);
    predicted_categories = cell([size(test_image_feats, 1), 1]);
    for i=1:size(IDX,1)
        predicted_categories{i}=train_labels(IDX(i));
    end
Run Code Online (Sandbox Code Playgroud)

train_image_feats是一个300乘256的矩阵,其中每行代表一个图像.同样是结构test_image_feats.train_labels是与训练矩阵的每一行对应的标签.

我所遵循的书只是说上述方法达到了19%的准确率.

作者是如何得出这个结论的?有没有办法用这个分类器或其他来判断我的结果的准确性?

然后,作者使用另一种特征提取方法,并将其准确度提高了30%.

我怎样才能找到准确度?无论是图形还是仅通过一个简单的百分比.

matlab classification machine-learning image-processing knn

3
推荐指数
1
解决办法
4544
查看次数

Matlab中观察和变量之间的差异

我甚至有点惭愧甚至问这个但是这里有.在每个Matlab帮助文件中,输入矩阵是一个NxD矩阵,XMatlab将矩阵排列描述为

数据,指定为数字矩阵.X行对应于观察,列对应于变量.

以上取自kmeans的帮助

我对Matlab对观察和变量的意义感到困惑.

假设我有一个由100个图像组成的数据矩阵.每个图像由大小的特征向量表示128 x 1.所以这里有100个我的观察和128个变量,还是反过来?

我的数据矩阵是大小128 x 100还是100 x 128

matlab image machine-learning matrix

3
推荐指数
1
解决办法
2452
查看次数

我的Raycast似乎没有任何范围-仅检测放置在发射游戏对象旁边的对象

我正在使用以下代码(来自:https : //gist.github.com/valryon/566c02f3c5808dcd9968)在我的游戏中生成2D激光。激光具有起点,中间和终点。组成激光器,并被子对象作为父对象。

public class LaserScript : MonoBehaviour
{
    [Header("Laser pieces")]
    public GameObject laserStart;
    public GameObject laserMiddle;
    public GameObject laserEnd;

    private GameObject start;
    private GameObject middle;
    private GameObject end;

    void Update()
    {
        // Create the laser start from the prefab
        if (start == null)
        {
            start = Instantiate(laserStart) as GameObject;
            start.transform.parent = this.transform;
            start.transform.localPosition = Vector2.zero;
        }

        // Laser middle
        if (middle == null)
        {
            middle = Instantiate(laserMiddle) as GameObject;
            middle.transform.parent = this.transform;
            middle.transform.localPosition = Vector2.zero;
        }

        // …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine game-physics

3
推荐指数
1
解决办法
48
查看次数

Vec3b没有三个参数?

我正在使用类来创建一个函数.该功能必须在提供的图像中找到所选颜色.所以我做了这个,所以函数采用Vec3b值,因为它是我们正在讨论的RGB值.

class colorcompare
{
private:
int threshold;
Vec3b color;

void setcolor(Vec3b);
Mat process(Mat&);
void setthresh(const int);
int getdist(Vec3b);
};

void colorcompare::setcolor(Vec3b colr)
{
color = colr;
}

int _tmain(int argc, _TCHAR* argv[])
{

colorcompare cc1;
Mat image;

image = imread("c:\\car2.jpg", -1);

cc1.setcolor(19,69,139); //This is where im getting error
cc1.setthresh(100);
namedWindow("meh");

imshow("meh", cc1.process(image));
waitKey(0);



return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我得到的错误是这样的: 'colorcompare::setcolor' : function does not take 3 arguments

我知道vec3b是3个值的向量,换句话说,我可以将vec3b的各个值作为color [0],color [1]和color [2]来访问.

我知道我可以在上面的函数中定义它,但它不应该vec3b能够取3个值吗?就像我在我的代码中做的那样?

opencv

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

如何检测区域上下的点?

我有这个图像:

在此输入图像描述

红点是划分这个阿拉伯语单词段的不同字母的坐标.

我想检测点之间区域上方或下方的点.

点是(从左到右)= [81,183;80,217;83,275;83,314]

现在在[81,183]和之间的字母上方有一个点[80,217].同样有上述部分之间的点[80,217][83,275]与点下方区域[83,275][83,314].

我想要做的是假设在坐标上方检测到一个点,然后必须删除该坐标.是否有可能在Matlab中检测到这些?

编辑:这是原始图像

在此输入图像描述

第一张图片只是展示我感兴趣区域的作物

matlab image image-processing image-segmentation

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

如何从列表中随机选择连续样本?

我有不同深度的输入数组,范围从 20 到 32。我无法填充它们以使它们全部具有相同的大小,因此最好的选择是在每次迭代时随机选择图像的 z 深度。

我读过numpy.random.choice()可以用于此目的,但我得到了随机排列的索引,我想要连续的选择。

z_values = np.arange(img.shape[0]) # get the depth of this sample
z_rand = np.random.choice(z_values, 20) # create an index array for croping
Run Code Online (Sandbox Code Playgroud)

上面给了我:

[22  4 31 19  9 24 13  6 20 17 28  8 11 27 14 15 30 16 12 25]
Run Code Online (Sandbox Code Playgroud)

这对我来说没有用,因为它们不连续,我不能用它来裁剪我的音量。

有没有办法获得连续的随机样本?

谢谢

python random numpy

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

为什么我的图像会在很小的减量后消失?

我有这个图像:

我想以小增量将其转换为黑白,奇怪的是它只是在一次增量后消失.

对于这条线

bw_normal = im2bw(img, 0.33);
Run Code Online (Sandbox Code Playgroud)

我明白了:

但对于这一行:

bw_normal = im2bw(img, 0.32);
Run Code Online (Sandbox Code Playgroud)

这个词完全消失了,这不应该发生吗?它只发生在这个图像上,任何其他图像将继续显示直到0.1.

这就是我所得到的 0.32

只是一个空白区域,任何人都可以解释这个.

matlab image-processing

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

更多地控制细化算法?

我有一些文本文档,我想将文本细化为不同的宽度,如2像素宽笔画,4像素宽等等.

我知道matlab已经有了稀疏算法,bwmorph并且可以通过使用来实现一个像素宽的细化

thinned = bwmorph(bw_image, 'thin', 'n=Inf');
Run Code Online (Sandbox Code Playgroud)

但是这会将图像缩小到1像素宽度.改变价值n不会产生预期的结果.有什么方法可以确保减薄到n像素宽度?

algorithm matlab image-processing

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

我可以找到verilog代码的执行时间吗?

我知道verilog是一个HDL,它的全部是关于并行处理,但我面临的问题是我必须编写一份报告,说明为什么一部分C++代码在HDL环境中更好.

所以我有C++代码,我在Verilog中写道.它完美地运作.现在我必须编写一份关于Verilog中这部分代码如何更快的报告.所以我必须进行执行时间比较.

我设法使用以下方法找到我的C++代码的执行时间:

#include <iostream.h>
#include <time.h>
using namespace std;


int main()
{
    clock_t t1,t2;
    t1=clock();
    //code goes here
    t2=clock();
    float diff ((float)t2-(float)t1);
    cout<<diff<<endl;
    system ("pause");
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

现在我怎样才能在Verilog中得到相同的结果?Xilinx编译器中是否有任何选项可以告诉我这段代码在编程到FPGA板上后产生最终结果需要多长时间?或者我可以在代码中添加能够提供此结果的内容吗?

谢谢

c++ hardware verilog fpga hdl

0
推荐指数
1
解决办法
1385
查看次数

如何将线的投影转换为任何可用的分段信息?

我一直在阅读Matlab中的自动文本行识别,尽管有很多高级方法可以做到这一点,但每篇论文都提到检测文本行的最简单方法是通过水平投影.所以我决定为自己尝试这种方法.

我对此非常陌生并撞到了一堵砖墙,我达到了一个我不知道该怎么办的水平.这是我迄今取得的成就:

我正在尝试一个与语言无关且只对文本行感兴趣的系统,所以我选择了阿拉伯语文本:

在此输入图像描述

我使用该函数radon来获得投影.

img = rgb2gray(imread('arabic.jpg'));
[R, xp] = radon(bw_closed, [0 90]);
figure; plot(xp,R(:,2)); title('at angle 90');
Run Code Online (Sandbox Code Playgroud)

这是情节(投影)

在此输入图像描述

很明显,5个峰值代表检测到的5行,但我如何从这里开始分割原始文档?

除此之外,有人可以帮助我吗?我读过的所有论文都没有提到如何从这一步骤开始,他们只是说从投影中我们得到了检测到的线条.

我要问的是,从情节数据中我可以告诉matlab文本行是什么以及行之间的误差是什么?

matlab plot image-processing image-segmentation

0
推荐指数
1
解决办法
2122
查看次数