我一直在阅读有关特征检测的内容,并想尝试哈里斯角点检测器.我意识到这是通过打电话来实现的
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 …
即使使用像最近邻居这样的简单分类器,我也无法判断其准确性,因而无法改善它.
例如,使用以下代码:
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帮助文件中,输入矩阵是一个NxD矩阵,XMatlab将矩阵排列描述为
数据,指定为数字矩阵.X行对应于观察,列对应于变量.
以上取自kmeans的帮助
我对Matlab对观察和变量的意义感到困惑.
假设我有一个由100个图像组成的数据矩阵.每个图像由大小的特征向量表示128 x 1.所以这里有100个我的观察和128个变量,还是反过来?
我的数据矩阵是大小128 x 100还是100 x 128
我正在使用以下代码(来自: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) 我正在使用类来创建一个函数.该功能必须在提供的图像中找到所选颜色.所以我做了这个,所以函数采用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个值吗?就像我在我的代码中做的那样?
我有这个图像:

红点是划分这个阿拉伯语单词段的不同字母的坐标.
我想检测点之间区域上方或下方的点.
点是(从左到右)= [81,183;80,217;83,275;83,314]
现在在[81,183]和之间的字母上方有一个点[80,217].同样有上述部分之间的点[80,217]和[83,275]与点下方区域[83,275]和[83,314].
我想要做的是假设在坐标上方检测到一个点,然后必须删除该坐标.是否有可能在Matlab中检测到这些?
编辑:这是原始图像

第一张图片只是展示我感兴趣区域的作物
我有不同深度的输入数组,范围从 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)
这对我来说没有用,因为它们不连续,我不能用它来裁剪我的音量。
有没有办法获得连续的随机样本?
谢谢
我有这个图像:

我想以小增量将其转换为黑白,奇怪的是它只是在一次增量后消失.
对于这条线
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

只是一个空白区域,任何人都可以解释这个.
我有一些文本文档,我想将文本细化为不同的宽度,如2像素宽笔画,4像素宽等等.
我知道matlab已经有了稀疏算法,bwmorph并且可以通过使用来实现一个像素宽的细化
thinned = bwmorph(bw_image, 'thin', 'n=Inf');
Run Code Online (Sandbox Code Playgroud)
但是这会将图像缩小到1像素宽度.改变价值n不会产生预期的结果.有什么方法可以确保减薄到n像素宽度?
我知道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板上后产生最终结果需要多长时间?或者我可以在代码中添加能够提供此结果的内容吗?
谢谢
我一直在阅读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文本行是什么以及行之间的误差是什么?