Matlab - 如何手动跟踪对象的边界

时间:2014-04-30 00:42:06

标签: matlab image-processing boundary

我试图在matlab中找到并提取二进制图像的边界,而不使用像bwboundaries这样的东西。

是否有更多的手动方式,可以使用循环并更改边界像素的颜色。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

因为它是二进制的所以你可以使用两个循环对。

- 首先确保图像是二进制的。(以防万一它是灰度阈值)

- 使用高度的第一个循环对和宽度的一个循环对并跟踪任何变化,即如果像素是黑色而下一个像素是指向新垫子的白色绘制。(即将该点标记为255或任何颜色你想要的)

- 宽度和高度相同,并将其存放到另一个垫子中。

- 然后添加两个垫子并平均结果。

这是手动方式,可能效率不高。但它可以帮助您修改过程以获得精确的边缘。

(来源:我曾经使用这种技术来检测包含条形码的透视变换矩形,因为条形码线会因为条纹线而产生过多的边缘)

答案 1 :(得分:-1)

我不会通过手动方式理解你的意思。它是逐像素还是其他什么意思?无论如何,尝试这个例子,并充分解释你的问题,你真正想要的。

d1 = double(imread('cameraman.TIF'))./255;  %# Load the image, scale from 0 to 1
subplot(2,2,1); imshow(d1); title('d1');    %# Plot the original image
d = edge(d1,'canny',.6);                    %# Perform Canny edge detection
subplot(2,2,2); imshow(d); title('d');      %# Plot the edges
ds = bwareaopen(d,40);                      %# Remove small edge objects
subplot(2,2,3); imshow(ds); title('ds');    %# Plot the remaining edges
iout = d1;
BW = ds;
iout(:,:,1) = iout;                           %# Initialize red color plane
iout(:,:,2) = iout(:,:,1);                    %# Initialize green color plane
iout(:,:,3) = iout(:,:,1);                    %# Initialize blue color plane
iout(:,:,2) = min(iout(:,:,2) + BW, 1.0);     %# Add edges to green color plane
iout(:,:,3) = min(iout(:,:,3) + BW, 1.0);     %# Add edges to blue color plane
subplot(2,2,4); imshow(iout); title('iout');  %# Plot the resulting image

您也可以使用Blob方法跟踪边界,但这取决于您的要求。