7

これらのコマンドを試しました:

im=imread('untitled_test1.jpg');
im1=rgb2gray(im);
im1=medfilt2(im1,[15 15]);
BW = edge(im1,'sobel'); 

msk=[0 0 0 0 0;
 0 1 1 1 0;
 0 1 1 1 0;
 0 1 1 1 0;
 0 0 0 0 0;];
B=conv2(double(BW),double(msk));

Ibw = im2bw(B);
CC = bwconncomp(Ibw); %Ibw is my binary image
stats = regionprops(CC,'pixellist');

% pass all over the stats
for i=1:length(stats),
size = length(stats(i).PixelList);
% check only the relevant stats (the black ellipses)
if size >150 && size < 600 
    % fill the black pixel by white    

    x = round(mean(stats(i).PixelList(:,2)));
    y = round(mean(stats(i).PixelList(:,1)));
    Ibw = imfill(Ibw, [x, y]);

else
    Ibw([CC.PixelIdxList{i}]) = false;
end;
end;

(ここには別のコマンドラインがありますが、問題はそれらのせいではないと思います。)

labeledImage = bwlabel(binaryImage, 8);     % Label each blob so we can make measurements of it
blobMeasurements = regionprops(labeledImage, Ibw, 'all');   
numberOfBlobs = size(blobMeasurements, 1); 

次のエラー メッセージが表示されました。

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'struct'.

Error in ==> test2 at 129
numberOfBlobs = size(blobMeasurements, 1);

何がうまくいかないのですか?

4

2 に答える 2

18

組み込み関数SIZEをシャドウする「サイズ」という変数を作成したため、このエラーが発生しています。関数を呼び出して compute する代わりに、MATLABは構造体をインデックスとして使用して変数にインデックスを付けようとします (エラー メッセージが示すように、これは機能しません)。 numberOfBlobsblobMeasurements

一般に、変数や関数に既存の関数の名前を付けるべきではありません (自分が何をしているのかわかっていない限り)。コード内の変数の名前を「サイズ」以外の名前に変更し、コマンドを発行clear sizeしてワークスペースから古いサイズ変数をクリアし、コードを再実行します。

于 2012-04-09T01:18:54.630 に答える
1

エラーメッセージは、エラーがにあることを示していますnumberOfBlobs = size(blobMeasurements, 1);。これらの要素にアクセスするためsubsindexに使用される可能性が最も高いです。size(..., 1)

これblobMeasurementsは構造体の配列(または単一の構造体)であり、その操作は完全には定義されていないと思います。

length以前と同じようにコマンドを使ってみませんか?これは、コードの少し前に機能しました。

于 2012-04-08T08:30:15.550 に答える