我想检测图像中的边缘(具有子像素精度),如下所示:
分辨率约为600 X 1000.
我在这里看到了Mark Ransom的评论,其中提到了垂直边缘的边缘检测算法.我还没有遇到任何问题.在我的情况下是否有用(因为边缘不是严格的直线)?但它始终是一个垂直边缘.我希望它至少精确到像素的1/100.我还想访问这些子像素坐标值.
我尝试过Agustin Trujillo-Pino的"精确亚像素边缘位置".但这并没有给我一个持续的优势.
还有其他算法吗?我将使用MATLAB.
我附加了另一个算法必须处理的类似图像:
任何输入将不胜感激.
谢谢.
编辑:
我想知道我是否可以这样做:在MATLAB中应用Canny/Sobel并获得该图像的边缘(注意它不是连续的线).然后,以某种方式插入此Sobel边缘并获得子像素中的坐标.可能吗?
我遇到了一个要求,即使用放置在其周围的三个摄像头来重建对象的3D图像,以使该对象(每个摄像头的视场在一起)覆盖所观察的整个对象。
据我所知,对于这三个图像(同一对象的不同视图),我必须首先匹配特征(例如SIFT),然后获得视差(?)。还是应该使用“图像拼接”并处理拼接的图像(也许以此创建3D点云)?
请告诉我如何进行该应用程序。我应该阅读哪些必要的主题?
我的应用程序是仅使用3D相机捕获3D对象并保存此3D图像。
问候,
梅加纳
编辑:
我问这个问题有两个原因:
我想更改一组点的坐标系(旧笛卡尔坐标系到新笛卡尔坐标系)。这种转换将涉及平移和旋转。这就是我打算做的:
对于该图像,我有一组位于 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)
。我在这儿吗?
这是我遇到的问题:我有一个如下图所示的图像.我想检测一下我用红线标记的圆形区域(这个特别明亮的环).
最初,这就是我现在所做的:(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的新手,刚刚开始研究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,NaN; 5,Inf,NaN; 6,16,26];
我想消除所有具有Inf或NaN元素的行.
所以预期的结果是:[1,11,21; 6,16,26];
由于我将使用尺寸为4000 X 3000的图像,我想要一种非常快速有效的方法.
我这样做是为了在我获得的点云中拟合一个平面(最合适).拟合平面的函数不采用Inf和NaN值.因此,即使找到一个NaN值,也必须消除所有相应的X,Y和Z坐标.
如果有更好的方法来做到这一点,除了我目前正在做的,请通知.
谢谢=)