【问题标题】:How to plot a vector containing 6000 elements against a vector containing 500 elements?如何绘制包含 6000 个元素的向量与包含 500 个元素的向量?
【发布时间】:2014-02-08 21:29:32
【问题描述】:

我试图在特定阈值处绘制连接组件的面积与其灰度强度级别。

我想出的代码尝试通过首先将文本图像转换为选定阈值的二进制文件来完成此操作,然后使用regionprops 找到该区域,将此图像转换回灰度。然后我使用hist 找到了强度级别。然后绘制强度与面积的关系。这基本上给了我一个大约 6000 个元素的强度向量,并且连接的组件只有 513。当我尝试 plot 时,我收到以下错误:

???使用 ==> 绘图时出错 向量的长度必须相同。

这是我的代码

 img = rgb2gray(imread('urdu.jpg'));

for k = 0:0.01:1
    bw_normal = im2bw(img, k);
    bw = imcomplement(bw_normal);
    [label,n] = bwlabel(bw);
    stats = regionprops(label, 'Area');
    gray = double(bw_normal);
    h = hist(gray);
    h = h(:);
    plot([stats.Area],h);
    %axis([0 350 0 1.1])
    hold on;
end

如您所知,我正在尝试以阈值的增量查找连接组件的区域。

我对挑战的实施是错误的吗?这可以通过其他方式完成吗?

为了清楚起见,最终产品应该是这样的:

【问题讨论】:

    标签: matlab image-processing plot histogram image-segmentation


    【解决方案1】:

    您无法在原始灰度图像上做直方图,因为您正在计算bwlabel 之后的区域。一种肮脏的方法可能会在不调用hist 函数的情况下工作,但您需要粗略估计连接组件的最大面积。请注意,有时您设置一个阈值,某些连通分量的面积非常大,但如此大的值只出现极少数(大多数时候为 1)。您可以考虑在最终图像中忽略如此大的区域。根据您展示的图片,我使用 200 作为允许的最大连通分量区域。

    MAP=zeros(101,200);
    for k=0:0.01:1
        bw_normal = im2bw(img, k);
        bw = imcomplement(bw_normal);
        [label,n] = bwlabel(bw);
        stats = regionprops(label, 'Area');
    
        for j=1:length(stats)
            if stats(j).Area<=200
                MAP(fix(k/0.01+1),stats(j).Area)=MAP(fix(k/0.01+1),stats(j).Area)+1;
            end
        end
    end
    imagesc(MAP)
    

    【讨论】:

    • 感谢您的回答。但是您能否进一步解释一下您的代码。我无法理解一些概念。你提到最多一次我会得到一个非常大的区域,何时以及为什么会发生这种情况?选择 101 行和 200 列的原因是什么?另外,您能否解释一下 if 块中的语句,为什么是 fix 而不是 round 以及为什么是 +1?非常感谢
    • 在您的代码生成的图像上,我在 y 轴上有 0-100,在 x 轴上有 0-200。这些意味着什么?我想绘制连接组件的强度与面积?那么左边的绿色斑点是否意味着大多数连通分量都在 1-5 区域内?谢谢
    • fix(k/0.01+1) 只是让你的 k 0:0.01:1 得到 1:101。 +1 因为matlab索引从1开始,你也可以使用round。这也是您选择 101 行的原因。我仅根据您在问题中显示的图像选择了 200 列,您可以更改此值。这里的列指的是连通分量的面积
    【解决方案2】:

    您应该为每个阈值制作区域的直方图,而不是像素强度的直方图。假设您对使用 regionprops 找到的对象集合的 area 属性感兴趣。

    如果您对 regionprops 找到的每个对象的强度感兴趣,请使用一个或多个“像素值测量”,然后使用这些的直方图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2012-03-09
      • 2021-08-03
      • 1970-01-01
      • 2014-05-18
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多