【问题标题】:Find mean of pixels within a contour/patch matlab在轮廓/补丁 matlab 中查找像素的平均值
【发布时间】:2014-06-15 23:45:59
【问题描述】:

我正在尝试基于显着性获取显着性图,为此我必须根据图形切割分割图像并找到每个补丁的平均显着性。我能够分割图像,并获得原始图像的轮廓和显着性。等高线显示分割图像的地图。图片如下所示。

我正在尝试获取每个补丁或轮廓内的显着性值并获得其平均值。走了这么远之后,我有点难过,因为我想不出一个清晰而简单的方法来做到这一点。我检查了 matlab 中的 activecontour,但该函数似乎做了一些不同的事情。基本上,我需要每个补丁的参考。请帮我解决这个问题。 : 如何在图像 2 指定的等高线图中从原始图像(第一个)获得平均显着性值?

提前致谢。

编辑:

补丁是指每个封闭的轮廓区域。

【问题讨论】:

  • 您是否有可以为您创建的每个图像补丁/轮廓提供 ID 的东西?看一下等高线图,我不知道你说的“图像补丁”是什么意思。您的意思是在每个 CLOSED 轮廓中找到平均显着性值吗?
  • 是的,在每个闭合轮廓区域中。 @rayryeng​​span>
  • @rayryeng 我没有除此之外的任何其他数据。有没有办法解决这个问题?
  • 我会尽快给你答案。
  • 不客气。我也刚刚编辑了我的答案,因为我的初始实现不起作用。我怀疑如果您按照我第一次使用的方式进行操作,它只会为您填充的地图返回一个完全实体的对象。我做了一个小修改,请检查一下。

标签: image matlab image-processing contour image-segmentation


【解决方案1】:

我个人会做的是使用imfill 来填充等高线图中的所有“漏洞”。这将做的是它将搜索存在闭合轮廓的任何区域,然后用白色像素填充这些区域。完成后,使用bwlabel,它会为您提供一个 ID 映射,其中独立和连接的区域被分配一个唯一 ID。一旦你有了这个,循环遍历每个可能的 ID,提取属于该 ID 的区域的像素,然后计算平均显着性。

编辑:如果您首先尝试按照我上面所说的内容执行imfill,它可能只会给您填充整个对象,而这可能不是您想要的。在您这样做之前,我建议您反转等高线图,使白线变为黑色。完成此操作后,使用已填充的地图执行逻辑 AND 操作,以确保您正在分离连接的区域。

假设您有以下变量:

  1. sal - 你的显着性矩阵
  2. cmap - 你的等高线图 - 假设这是一个二值图像。

这是我要做的代码:

filledCMap = imfill(cmap); % Fill in holes for contour map.
invertCMap = ~cmap; % Invert so that the white contour lines are black
finalCMap = filledCmap & invertCMap; % Mask to ensure we separate the regions
[labelMap, numLabels] = bwlabel(finalCMap); % Extract label map and number of labels

aveSaliency = zeros(1, numLabels); % Store average saliency values here
regionsSaliency = cell(1, numLabels); % Store which region corresponds to a particular ID

% For each label we have...
for i = 1 : numLabels
    map = labelMap == i; % Find the i'th region
    regionsSaliency{i} = map; % Store for visualization
    salValues = sal(map); % Extract those saliency values
    aveSaliency(i) = mean(salValues(:)); % Calculate the mean and store
end

此代码最终将完成的是计算与唯一 ID 关联的每个区域的平均显着性值。如果您想查看针对哪个特定区域计算的显着性,您可以执行imshow(regionsSaliency{i}); 其中i 是您想要的ID。显示这一点,aveSaliency(i) 将为您提供 ID i 的平均显着性。

请记住,我没有对此进行测试。这是我首先要尝试的。我不确定这是否是您正在寻找的答案。

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 2014-04-24
    • 2018-08-23
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多