機械学習のために以下​の"Isabun"と​いうバイナリー画像か​ら任意の座標を100​個選択するプログラム​を作りたいです。

조회 수: 1 (최근 30일)
大誠
大誠 2023년 7월 10일
댓글: 大誠 2023년 7월 11일
バイナリー画像のサイズは236×392です。
x座標、y座標を決めるベクトルをそれぞれ作って、それらから座標を指定するxyを作り、バイナリー画像のホワイトの部分の座標だけを指定したいです
ー作成したプログラムー
%ランダムな配列の作成
x = random('uniform',1,236,10)
X = x(:);
uiX = uint8(X)
y = random('uniform',1,392,10)
Y = y(:)
uiY = uint8(Y)
xy= uint8(zeros(20,2));
for i = 0:100;
n=1;
if Isabun(i)==1;
xy(n,:)=[XX(i),YY(i)];
n=n+1;
end;
end;
ーエラーメッセージー
配列インデックスは正の整数または logical 値でなければなりません。
画像処理の研究を始めて少し時間がたっているのですが、現在悪戦苦闘中なのでもしわかる方がいたら教えていただければと思い質問させていただきました。
よろしくお願いいたします。

채택된 답변

Kenjiro Sugimoto
Kenjiro Sugimoto 2023년 7월 10일
편집: Kenjiro Sugimoto 2023년 7월 11일
複数のバグが絡んでおりますので順を追って説明いたします。
まずエラーメッセージの直接的な出処についてです。MATLABでは添字は1からというルールですが、ご掲示のコードでは i=0:100 のように0スタートになってしまっています。0 は正の整数ではないため、Isabun(i) の行で上記のエラーメッセージが出ております。
次にバグについてです。Isabun は二次元配列ですが、ご掲示のコードでは Isabun(i) のように一つの添字しか与えられておりません。またカウント用変数の初期化 n=1 も、for文の外側(直前)に移動する必要があります。 そのほか、XX,YYが未定義である点もバグかと思われます。
またバグではありませんが修正が望ましい箇所があります。一つは、MATLABでは二次元配列の添え字は y,x の順序ですが、ご掲示のコードでは逆になってしまっています。また for や if の行の最後にセミコロンは不要です(警告が出るかと思います)。
意図を掴めているかは自信がありませんが、上記のバグを解消した参考コードです。
Isabun = imread("Isabun.png");
%ランダムな配列の作成
y = random('uniform',1,236,10);
Y = y(:);
uiY = uint8(Y);
x = random('uniform',1,392,10);
X = x(:);
uiX = uint8(X);
xy = uint8(zeros(20,2));
n = 1;
for i = 1:100
if Isabun(uiY(i),uiX(i)) == 1
xy(n,:) = [X(i),Y(i)];
n = n+1;
end
end
  댓글 수: 3
Akira Agata
Akira Agata 2023년 7월 11일
+1
バイナリ画像の白い部分からランダムに100個の点を選択してその (x,y) 座標を得るのであれば、for ループを使わなくても実現可能です。以下はその一例です。
% 画像を読み込み
Isabun = imread("https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1430498/Isabun.png");
% 念のため2値化
Isabun = imbinarize(Isabun);
% ランダムに選ぶ点の数
N = 100;
% バイナリ画像の白いピクセルの (x,y) 座標すべてを取得
[y, x] = find(Isabun);
% ランダムに100個の点を抽出
pt = randperm(numel(x), N);
x = x(pt);
y = y(pt);
% 可視化して確認
figure
imshow(Isabun)
hold on
scatter(x, y, 'rx')
大誠
大誠 2023년 7월 11일
Akira Agata 様ありがとうございます。
for文しか頭になかったですが、このような方法でも座標を得られるのですね。
とても勉強になります。
回答していただきありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!