怎么用matlab代码计算白色线内区域像素数,要完整代码

图片是二值化后,用candy边缘检测得到的,怎么用matlab代码计算白色线内区域像素数???求大神指点,给完整的代码。... 图片是二值化后,用candy边缘检测得到的,怎么用matlab代码计算白色线内区域像素数???求大神指点,给完整的代码。 展开
 我来答
jimtien
推荐于2017-10-02 · TA获得超过7654个赞
知道大有可为答主
回答量:2146
采纳率:88%
帮助的人:1120万
展开全部

图中两个区域都有没闭合的区域, 而如果用闭合采用闭合运算,则需要采取不同的参数, 可考虑分两部分进行计算.因为上部分非闭合区域较多,即使人工处理也有困难(有些地方改连还是不连,难做判断),因此结果还有不完美的地方.

clear all; close all; clc;
I = imread('twoman.jpg');
I = im2bw(I);

[row,col]=size(I);
se = strel('line',10,0);
Ie = imclose(I,se);

L = bwlabel(Ie);
STATS = regionprops(L,'BoundingBox');
figure; imshow(I);hold on;
for i = 1:size(STATS,1)
    rectangle('Position',STATS(i).BoundingBox,'EdgeColor','g');
end

If2 = imfill(Ie,'holes');
y = ceil(STATS(1).BoundingBox(1));
x = ceil(STATS(1).BoundingBox(2));
h = ceil(STATS(1).BoundingBox(3));
w = ceil(STATS(1).BoundingBox(4));
I2 = If2(x:x+w,y:y+h);
figure; imshow(I2);title(num2str(sum(sum(I2))));

se = strel('line',4,90);
Ie1 = imclose(I,se);
If1 = imfill(Ie1,'holes');

y = ceil(STATS(2).BoundingBox(1))-5;
x = ceil(STATS(2).BoundingBox(2))-5;
h = ceil(STATS(2).BoundingBox(3))+10;
w = ceil(STATS(2).BoundingBox(4))+10;
I1 = If1(x:x+w,y:y+h);
figure; imshow(I1);title(num2str(sum(sum(I1))));

图中数字为白点的数量

更多追问追答
追问
你又把图像转为二值图像计算的?
追答
我又转了一次二值图是因为我从这里(网页)保存的图片,保险起见再转一次
fucshidam
2014-12-20 · TA获得超过536个赞
知道小有建树答主
回答量:393
采纳率:40%
帮助的人:347万
展开全部

可以用行扫描算法:

  1. 遍历图像的每一行。

  2. 每一行中,从左侧开始,找到第一个右侧是黑点的白点,记住其列数。

  3. 向右找到下面的第一个白点,记住其列数。

  4. 两个列数的差值加入总面积。

  5. 如果每一行有多对如2、3所述的白点,则做同样的操作。

  6. 所有行遍历完后,即得到总面积。

    可参考基于区域的图像分割技术。不过你的边缘可能需要闭合一下,这样计算比较准确。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式