regionprops()在matlab中给出错误

时间:2015-05-12 13:07:56

标签: matlab

我使用regionprops(),但我收到以下代码的错误:

J = imread('E:\Canopy New Exp\Data Set\input.jpg');
I = rgb2gray(J);
BW = regionprops(J,'basic');
stats = regionprops('table',BW,'Centroid',...
     'MajorAxisLength','MinorAxisLength');
centers = stats.Centroid;
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
radii = diameters/2;

hold on;
viscircles(centers,radii);
hold off;

但我收到以下错误:

Error using regionprops
Expected input number 1, L, to be one of these types:

double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64

Instead its type was char.

Error in regionprops (line 142)
     validateattributes(L, {'numeric'}, ...

Error in Untitled (line 8)
stats = regionprops('table',BW,'Centroid',...

有什么建议吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

您正在执行regionprops两次,第二次以'table'作为第一个参数。 regionprops期望将图片(黑白,连接组件或标记)作为第一个参数,这就是您收到错误type char的原因。

而是将黑白(二进制)图像输入到regionprops一次调用,应该这样做:

thresh = graythresh(I); % get a threshold (you could just pick one)
I_BW = im2bw(I,thresh); % make the image binary with the given threshold
stats = regionprops(I_BW,'basic'); % do regionprops on the thresholded image

您还可以使用2个图像参数regionprops进行操作,一个用于显示另一个图像参数的区域,因此您可以尝试使用以下regionprops调用代替:

stats = regionprops(I_BW, J, 'basic');

答案 1 :(得分:1)

regionprops输出一个对象,所以在上面代码示例的第三行中,您在J上调用它,一个图像,这很好,并返回一个适当的对象BW。但是在接下来的行中,您再次在BW对象上调用它,这就是错误的来源。在连续对象上调用它两次没有意义,但更有可能的是,这不是你的意图,你打算先用im2bw对图像进行二值化。

当您阅读matlab输出的错误消息时,请注意底线是代码中发生错误的行。如果你向matlab的内置函数之一提供了错误的输入(这是我自己经验中最常见的一种错误),那么直到你深入研究matlab的内部函数才会出错体现。

因此,从底部向上阅读错误报告,您将深入到调用堆栈中,直到顶行,这是“实际”错误。这条最高线为您提供了冲突的原因,这是故事的一半。然后,您可以将这一半带回代码行,看看它为什么会发生以及如何修复它。

答案 2 :(得分:1)

您可能正在为它提供RGB阵列NxMx3。根据文档,regionprops采用NxM二进制数组。