2017-12-10 10 views
0

私の問題は、3点の静的な点に画像内の点の距離計算を行ったことです。どの距離が最小かを知り、ピクセルの値を2番目の配列に書きたいと思います。私はインデックスを取得するためにmin()を使用しましたが、私はそれらの画像でどのようにアクセスするのか分かりません。私はこれが唯一のpicture(1:3, 1, 1)の私に値を与えるだろう知っているので、最初の3つの画素最小インデックスの使用

data = rand(5, 5, 3);   # distances of a 5x5 image to 3 different points 
[~, mi] = min(data, [], 3); # which of the distances is the minimum 
result = picture(mi);   # write pixel values to result 

、と私はなインデックスを変換するために適している機能が見つかりませんでした:私は、少しのコードを簡素化。どのようにこれを達成し、ループを書くことを避けることができますか?

編集clearificationについては

mi

data = rand(3, 3, 2) 
data = 
ans(:, :, 1) = 
    0.316498 0.054937 0.606390 
    0.537073 0.231184 0.790371 
    0.770788 0.334282 0.522369 

ans(:,:,2) = 
    0.843369 0.051667 0.227570 
    0.452298 0.407662 0.648079 
    0.450546 0.398068 0.281694 

[~, mi] = min(data, [], 3) 
mi = 
    1 2 2 
    2 1 2 
    2 1 2 

data(mi) 
ans = 
    0.31650 0.53707 0.53707 
    0.53707 0.31650 0.53707 
    0.53707 0.31650 0.53707 

あなたが見ることができるように、私は基本的にdata(1, 1, 1)data(2, 1, 1)あるものをindeciesのみdata(1)data(2)でアクセスしますが、私は次のような結果

0.31650 0.051667 0.227570 
0.452298 0.231184 0.648079 
0.450546 0.334282 0.281694 
+0

インデックスを何に変換しますか?あなたはすでに彼らと一緒に画像をアドレスしています... – excaza

+0

はい、私は期待していません。私は私の質問を広げた。 – RyanMcFlames

+0

mmm ...「最初の」出力を使用していない理由は何ですか?私は何が欠けていますか? – beaker

答えて

0

にリターンを持っているしたいかもしれこの文脈でminは、最小限が発生するマトリックスのスライスを提供しています。期待される結果ですが、必ずしも最も有用なものではありません。あなたの最小値の位置にアクセスするためにlinear indicesを生成するmeshgridsub2indを使用することができます。

必要に応じて、あなたはまた、単に [x(:), y(:), mi(:)]添字を使用することができますが、それはこの中で、より扱いにくいと思われる

>> all(mins(:)==mins_lidx(:)) 

ans = 

    logical 

    1 

tmp = rand(3, 3, 2); 
[mins, mi] = min(tmp, [], 3); 

[r, c, ~] = size(tmp); % Get number of rows & columns 
[y, x] = meshgrid(1:r, 1:c); % Generate x,y pairs 
lidx = sub2ind(size(tmp), x(:), y(:), mi(:)); % Generate linear indices 

% Test out the linear indices 
mins_lidx = reshape(tmp(lidx), r, c); % Reshape to the slice size 

コンテキスト。

関連する問題