我试图绘制在灰度强度级别的特定阈值连接组件的面积。如何绘制包含6000个元素的矢量对包含500个元素的矢量?
我想出的代码试图通过首先在选定的阈值下将文本图像转换为二进制文件并使用regionprops
找到该区域,将该图像转换回灰度。然后我使用hist
找到强度等级。然后绘制强度与面积的关系。这基本上给了我一个强度矢量大约6000元的,当我尝试plot
我得到以下错误的连接组件仅513:
??? Error using ==> plot Vectors must be the same lengths.
这里是我的代码
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
所以你可以告诉我试图以增量的阈值查找连接组件的区域。
是我的执行挑战的错吗?这可以通过其他方式完成吗?
只是要清楚,最终产品应该是这个样子:
感谢您的回答。但是你能否请你进一步解释你的代码。我无法理解一些概念。你最多提到一次我会得到一个非常大的区域,何时以及为什么会发生这种情况?选择101行和200列的原因是什么?你也可以解释一下if语句中的语句,为什么''fix''而不是'round''以及为什么''1''?非常感谢 – StuckInPhD
同样在你的代码生成的图像上,我在y轴上有0-100,在x轴上有0-200。这些意味着什么?我想绘制连接组件的强度与面积?那么左边的绿色斑点意味着大多数连接的组件都在1-5区域内?谢谢 – StuckInPhD
修复(k/0.01 + 1)只会让你的k 0:0.01:1得到1:101。因为matlab索引从1开始,你也可以使用round。这也是你选择101行的原因。我根据您在问题中显示的图像选择了200列,您可以更改此值。这里的列是指连接组件的区域 – lennon310