Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 根据灰度图像中对象的强度级别绘制灰度对象的区域_Matlab_Image Processing_Plot_Image Segmentation - Fatal编程技术网

Matlab 根据灰度图像中对象的强度级别绘制灰度对象的区域

Matlab 根据灰度图像中对象的强度级别绘制灰度对象的区域,matlab,image-processing,plot,image-segmentation,Matlab,Image Processing,Plot,Image Segmentation,基本上,我试图产生的是不同灰度强度下的图像直方图,显示图像中连接组件的区域 让我进一步解释一下,我计划在不同的阈值水平下查找图像所有连接组件的区域。然后以图形方式将它们组合在一起,并显示它们与灰度图像的强度级别(即0-255)的对应关系 我希望我的代码能解释我想做什么 img = rgb2gray(imread('W1\Writer1_01_02.jpg')); for k = 1:-0.01:0.1 bw_normal = im2bw(img, k); bw = imco

基本上,我试图产生的是不同灰度强度下的图像直方图,显示图像中连接组件的区域

让我进一步解释一下,我计划在不同的阈值水平下查找图像所有连接组件的区域。然后以图形方式将它们组合在一起,并显示它们与灰度图像的强度级别(即
0-255
)的对应关系

我希望我的代码能解释我想做什么

img = rgb2gray(imread('W1\Writer1_01_02.jpg'));

for k = 1:-0.01:0.1
     bw_normal = im2bw(img, k);
     bw = imcomplement(bw_normal);
     [label,n] = bwlabel(bw);
     stats = regionprops(label,img, {'Area', 'Centroid'});
      plot([stats.Area],k,'o');
      axis([0 1000 0.1 1])

     hold on;
     
 end
正如您所知,我使用for循环生成了一个变化的阈值级别,计算CC的面积,并根据选定的阈值级别绘制它们。这就是它产生的结果:

这不是我想要的。我试图复制这个结果。它不必看起来像这样精确,但任何类似的东西都可以

然后我发现我可以直接使用
STATS=regionprops(…,I,properties)

所以我写了这个:

img = rgb2gray(imread('W1\Writer1_01_02.jpg'));

for k = 1:-0.01:0.1
     bw_normal = im2bw(img, k);
     bw = imcomplement(bw_normal);
     [label,n] = bwlabel(bw);
     stats = regionprops(label,img, {'Area', 'Centroid'});
%       plot([stats.Area],k,'o');
%       axis([0 1000 0.1 1])
      imshow(img);
     hold on;
     for j = 1:numel(stats)
         text(stats(j).Centroid(1),stats(j).Centroid(2), ...
        sprintf('%2.1f', stats(j).Area), ...
        'EdgeColor','b','Color','r');
     end
     
 end
这产生了以下结果:

现在我已经找到了灰度图中连接组件的区域。如何绘制它们以显示为所需的输出(上面显示的蓝色输出)


感谢您根据现有代码阅读

img = rgb2gray(imread('W1\Writer1_01_02.jpg'));
k = 1:-0.01:0.1;
bins = 1:100 % change depending on your image

% preallocate output - this will be filled with histograms
histout = zeros(length(k),length(bins); 

for m = 1:length(k); 
     bw_normal = im2bw(img, k(m));
     bw = imcomplement(bw_normal);
     [label,n] = bwlabel(bw);
     stats = regionprops(label,img, {'Area'});
     A = cell2mat(struct2cell(stats));
     histout(m,:) = hist(A,bins);
end
我将
regionprops
的输出更改为
Area
,因为它简化了将输出结构转换为可以被
hist
读取的内容的过程。从循环
k
更改为预定义向量
k
,并在循环中使用
k(m)
,只会使对
historut
的索引更直接一些

您可以使用
imagesc
显示,然后更正勾号标签:

imagesc(histout)
colormap('jet')
set(gca,'XTickLabel',bins(get(gca,'XTick')));
set(gca,'YTickLabel',k(get(gca,'YTick')));
xlabel('Area')
ylabel('Threshold')

你能提供你的原始数据吗。如果我要看代码来完成一些事情,使用实际的输入可以确保更高质量的输出。谢谢。不需要具体数据。任何文本图像都可以。就像我在最后展示的图像一样。我认为对于每个灰度级别,您需要提取所有
区域
值的列表,并从中构建直方图(使用一致的bin值)。“宽度图”中的每一行都是单个阈值级别的直方图。@nkjt您能否添加一个答案,其中包含如何实现这一点的代码。你所说的似乎产生了我想要的结果,但我不知道如何按照你解释的方式绘制直方图。非常感谢。