matlab - 使用 detectorMSERFeatures 时出错

标签 matlab image-processing matlab-cvst connected-components

我试图做一些形态学操作,然后尝试检测MSERFeatures。我收到错误。您能否在代码中提出任何替代/更正建议。我在 matlab 中遇到的错误也被引用

Img= imread('sub.png');
figure,imshow(Img);title('Original Image')
Img=double(Img);
m1=Img>40;
sd = stdfilt(Img, ones(3,3));
Img = Img.*m1;
figure,imshow(Img);
Img = bwareaopen(Img,50);
figure,imshow(Img);
% Detect and extract regions
mserRegions = detectMSERFeatures(Img);
mserRegionsPixels = vertcat(cell2mat(mserRegions.PixelList));  % extract regions
% Visualize the MSER regions overlaid on the original image
figure; imshow(Img); hold on;
plot(mserRegions, 'showPixelList', true,'showEllipses',false);
title('MSER regions');
% Convert MSER pixel lists to a binary mask
mserMask = false(size(Img));
ind = sub2ind(size(mserMask), mserRegionsPixels(:,2),mserRegionsPixels(:,1));
mserMask(ind) = true;

hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(Img), hy, 'replicate');
Ix = imfilter(double(Img), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
edgeMask=gradmag;
figure, imshow(gradmag,[]), title('gradmag')
edgeAndMSERIntersection = edgeMask & mserMask;
figure; imshowpair(edgeMask, edgeAndMSERIntersection, 'montage');
title('Gradient and intersection of Gradient with MSER regions')
[label n]=bwlabel(edgeAndMSERIntersection);
figure,imshow(label2rgb(label,'jet','k','shuffle'));

我收到如下错误

    Error using images.internal.imageDisplayValidateParams>validateCData (line 119)
If input is logical (binary), it must be two-dimensional.

Error in images.internal.imageDisplayValidateParams (line 27)
common_args.CData = validateCData(common_args.CData,image_type);

Error in images.internal.imageDisplayParseInputs (line 78)
common_args = images.internal.imageDisplayValidateParams(common_args);

Error in imshow (line 223)
  [common_args,specific_args] = ...

Error in ex7 (line 11)
figure,imshow(m3);

最佳答案

您得到的错误输出可以通过一行代码从底部读取,当您向上读取这些行时,它会深入调用堆栈。因此,第一行给出了实际提示的函数及其给出的原因。

这一行表示,对于逻辑输入,图像必须是二维的。如果你给它 3 维数据,那么它被假定为颜色,但它不能接受逻辑值 - 逻辑值是二进制的,它只能是真/假(并且可以用 0 和 1 表示,这有时很难区分普通的 uint 或 float)。

原因在错误报告的另一端,在底行:

figure,imshow(m3);

这通常是您代码中的一行。现在这一行没有出现在您提供的代码示例中,所以我从这里猜测,但要做的第一件事是检查 m3 变量的属性。您可以通过以下方式找到其尺寸

size(m3)

两种最可能的情况是 a)。 m3 具有两个以上的维度。也许这是一个针对标量进行阈值处理的彩色图像。或者 b). m3 的尺寸小于二维。也许您已经对其进行了一些操作,降低了其维度,例如求和或平均值。

如果这不能帮助您找到错误的根源,我建议您粘贴 ex7 脚本/函数的其他行。错误发生在第 11 行,因此至少前 11 行是有用的。如果它是一个函数,那么查看生成函数输入的代码将会很有帮助。

关于matlab - 使用 detectorMSERFeatures 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30189332/

相关文章:

matlab - 快速从 MATLAB 矩阵中删除行和列

python - 如何在 python 中进行 alpha 抠图

matlab - 为什么即使我安装了 Computer Vision Toolbox,MATLAB 也找不到 insertShape 和 detectMinEigenFeatures?

matlab - 在 MATLAB 中的许多图像上叠加时间戳

matlab - 让 libstruct 在 matlab 中用于 dll 指针参数

python - 在 python 与 matlab 中切片矩阵

matlab - 如何自动标准化多个直方图以达到相同的最大水平?

c++ - 如何检测圣诞树?

python - 使用 PIL 在 python 上向图像添加透明圆圈