我试图在matlab中找到并提取二进制图像的边界,而不使用像bwboundaries这样的东西。
是否有更多的手动方式,可以使用循环并更改边界像素的颜色。
任何帮助都将不胜感激。
答案 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方法跟踪边界,但这取决于您的要求。