小编Saa*_*nia的帖子

几乎垂直边缘的亚像素边缘检测

我想检测图像中的边缘(具有子像素精度),如下所示:

在此输入图像描述

分辨率约为600 X 1000.

我在这里看到了Mark Ransom的评论,其中提到了垂直边缘的边缘检测算法.我还没有遇到任何问题.在我的情况下是否有用(因为边缘不是严格的直线)?但它始终是一个垂直边缘.我希望它至少精确到像素的1/100.我还想访问这些子像素坐标值.

我尝试过Agustin Trujillo-Pino的"精确亚像素边缘位置".但这并没有给我一个持续的优势.

还有其他算法吗?我将使用MATLAB.

我附加了另一个算法必须处理的类似图像:

在此输入图像描述

任何输入将不胜感激.

谢谢.

编辑:

我想知道我是否可以这样做:在MATLAB中应用Canny/Sobel并获得该图像的边缘(注意它不是连续的线).然后,以某种方式插入此Sobel边缘并获得子像素中的坐标.可能吗?

matlab image-processing edge-detection

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

使用三个2D图像重建3D模型(在3个不同的视图中查看同一对象)

我遇到了一个要求,即使用放置在其周围的三个摄像头来重建对象的3D图像,以使该对象(每个摄像头的视场在一起)覆盖所观察的整个对象。

  • 我已经在立体视觉方面做了一些工作(使用两个摄像头)。在此,我们获得了3D点云。我认为这对我来说不是必需的,因为我不需要计算确切的x,y和z距离。我只需要获取一个3D模型。我的方法正确吗?我已阅读有关使用多台摄像机的Stereo Vision的信息。我应该用这个吗?
  • 我碰到了Image Analyst的这一评论:“ 图像实际上必须经过过滤的反投影重建过程,才能从以不同角度拍摄的图像构建3D图像。 ”我对此并不十分清楚。我没有图像堆栈,只有3个相同对象但具有不同视图的图像。我应该如何进行呢?在我的案例中使用了哪些术语?它称为3D重建吗?
  • 我也看到了SfM(运动结构)。我的对象/场景没有运动。
  • 我看到此代码可用。这也会占用大脑的不同部分,并将它们转换为3D图像。无论如何,我是否可以更改此代码以适合我的需要,或者它是完全不同的应用程序?

据我所知,对于这三个图像(同一对象的不同视图),我必须首先匹配特征(例如SIFT),然后获得视差(?)。还是应该使用“图像拼接”并处理拼接的图像(也许以此创建3D点云)?

请告诉我如何进行该应用程序。我应该阅读哪些必要的主题?

我的应用程序是仅使用3D相机捕获3D对象并保存此3D图像。

问候,

梅加纳

编辑:

  • 我还遇到了“三视图几何”(“ Hartley和Zisserman撰写的“计算机视觉中的多视图几何”的PART III)。我认为这与我想要的不一样。就我而言,场景在很大程度上不会重叠。每个摄像机的视场只会重叠一点点(立方体的边缘,如下所示),这与观看同一场景的一对立体摄像机不同。因此,立体声匹配将不可行。我的理解正确吗?我应该如何处理?

在此处输入图片说明

matlab image-processing

5
推荐指数
0
解决办法
1037
查看次数

通过平移和旋转从一种笛卡尔 3D 坐标系更改为另一种

我问这个问题有两个原因:

  1. 我想知道我对这个问题的理解是否正确。
  2. 为了澄清我的一个疑问。

我想更改一组点的坐标系(旧笛卡尔坐标系到新笛卡尔坐标系)。这种转换将涉及平移和旋转。这就是我打算做的:

在此输入图像描述

对于该图像,我有一组位于 XYZ 坐标系(红色)中的点。我想根据轴 UVW(紫色)更改它。为了做到这一点,我知道涉及两个步骤:平移和旋转。

当我翻译时,我只改变来源。(比如说,我希望 UVW 原点位于 (5,6,7)。然后,对于数据中的所有点,x 坐标将减去 5,y 坐标将减去 6,z 坐标将减去 7。这样做。我获取一组翻译数据。)

现在我必须应用旋转变换(在翻译的数据上)。旋转矩阵如图所示。Ux、Uy 和 Uz 值是 U 轴上距原点单位距离的点的坐标。类似地,值Vx、Vy和Vz是V轴上距原点单位距离的点的坐标。(我想知道我是否在这里。)Wx、Wy、Wz 计算为 ((归一化 u) X (归一化 v))

(此外,如果它有任何用途,我想让您知道我正在使用 MATLAB。)

编辑:

我在 3D 中有一组 42 个点(42 X 3 矩阵A),我希望将第一个点视为UVW平面的原点。所以第一个点的值将是我的平移向量。正确的?

接下来,计算旋转向量:根据我的要求,矩阵A的第6行必须是U轴,而第37行必须是V轴。因此,向量u将是矩阵A的(第一行减去第六行)。而向量v将是矩阵A的(第 1 行减去第 37 行)。

旋转矩阵的第一行将是矢量u/|u|(标准化)。第二行将是向量v/|v|(v 标准化)。第三行将是(u X v)。我在这儿吗?

math 3d matlab geometry coordinate-transformation

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

在此图像中找到几乎圆形的亮像素带

这是我遇到的问题:我有一个如下图所示的图像.我想检测一下我用红线标记的圆形区域(这个特别明亮的环).

在此输入图像描述

最初,这就是我现在所做的:(MATLAB)

binaryImage = imdilate(binaryImage,strel('disk',5)); 
binaryImage = imfill(binaryImage, 'holes'); % Fill holes.
binaryImage = bwareaopen(binaryImage, 20000); % Remove small blobs.
binaryImage = imerode(binaryImage,strel('disk',300));
out = binaryImage;
img_display = immultiply(binaryImage,rgb2gray(J1));
figure, imshow(img_display);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

输出似乎被剪切在对象的一个​​部分上(对于不同的图像作为输入,而不是上面显示的图像).我希望输出的方式是对称的(当它旋转时,它并不总是一个完美的圆形).

我想严格避免im2bw,因为一旦我二进制化,我就失去了很多关于形状的信息.

这就是我的想法:

我可以检测到图像的最外圆(几乎圆形)轮廓(以黄色显示).从这里,我可以找到质心,也许找到一个半径为50%的圆圈(找到红色所示的区域).但由于物体略微倾斜,因此不会完全对称.我该如何解决这个问题?

我附上另一幅图像,其中对象稍微倾斜这里

matlab image-processing

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

以最快的方式删除Point Cloud中的Inf和NaN值

我是MATLAB的新手,刚刚开始研究Stereo Vision.在场景的3D立体重建之后,从我获得的点云,我想忽略所有具有值NaN或Inf的坐标.

为此,我遵循以下程序:

对于尺寸为40×40的图像,点云是40×40×3的矩阵(3由于3D; X,Y和Z坐标).

从3D点云(40 X 40 X 3)开始,我得到一个尺寸为1600 X 3的矩阵.3列中的每一列都对应于X,Y和Z坐标

在这一步,我试图删除整行,如果我找到任何Inf或NaN元素.

例如,在连接步骤之后,如果我有矩阵A.

A = [1,11,21; NaN,12,22; 3,13,Inf; NaN,14,N​​aN; 5,Inf,NaN; 6,16,26];

我想消除所有具有Inf或NaN元素的行.

所以预期的结果是:[1,11,21; 6,16,26];

由于我将使用尺寸为4000 X 3000的图像,我想要一种非常快速有效的方法.

我这样做是为了在我获得的点云中拟合一个平面(最合适).拟合平面的函数不采用Inf和NaN值.因此,即使找到一个NaN值,也必须消除所有相应的X,Y和Z坐标.

如果有更好的方法来做到这一点,除了我目前正在做的,请通知.

谢谢=)

matlab image-processing stereo-3d point-clouds matlab-cvst

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