做毕业设计需要用到这个,所以自己写了个函数。函数作用是求两张轮廓线图片不一致地方所围成区域的周长和面积。后面还要优化,先把大致结构贴在这里:
function area_peri(a,b)%输入为两张轮廓图像
n = 481;m = 321;%n,m分别为图像的高和宽
pic1 = imread(a);
pic2 = imread(b);
pic1 = logical(pic1);
pic2 = logical(pic2);
pic = bitxor(pic1,pic2);%将两幅图像进行异或运算,求出边界
perimeter = bwarea(pic);%边界的像素点个数即周长
for i = 1:n,%遍历整个图像区域,求出边界围成面积的像素总个数即面积
flag = 0;
for j = 1:m,
if flag == 0
if pic(i,j) == 1
flag = 1;
end
else
if pic(i,j) == 1
flag = 0;
else
pic(i,j) = 1;
end
end
end
end
area = bwarea(pic);
fprintf('area = %f\nperimeter = %f\n',area,perimeter);
imshow(pic);
end
此函数的问题:对轮廓精确的要求较高(每一行必须修改偶数个像素,且边界必须是奇数;即奇数+奇数=偶数)
上述函数显然适用范围太过狭隘,轮廓不可能总会“碰巧”符合上述条件。实际上,搜索的思路也是自然而然的:即在封闭区域内选择一个种子点,然后在此点开始深

本文探讨了在MATLAB中求解0-1封闭区域面积的问题,指出传统方法对轮廓的精确度要求高,限制了其应用。作者提出了一种新的思路,即使用种子点进行深度优先搜索(DFS)来统计封闭区域内的像素数量,但发现MATLAB的递归效率较低。因此,作者转向使用C语言实现该算法,以提高效率。
最低0.47元/天 解锁文章
1634

被折叠的 条评论
为什么被折叠?



