2

我试图做一些形态学操作,然后尝试检测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);
4

1 回答 1

2

你得到的错误输出可以用一行代码从底部读取,当你向上读取这些行时,它会更深入地进入调用堆栈。所以最上面一行给出了实际抱怨的功能和它给出的原因。

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

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

figure,imshow(m3);

这通常是您代码中的一行。现在这一行没有出现在您提供的代码示例中,所以我从这里猜测,但首先要做的是检查m3变量的属性。你可以找到它的尺寸

size(m3)

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

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

于 2015-05-12T11:46:39.767 回答