2017-12-10 26 views
0

제 문제는 그림에서 점의 거리 계산을 세 개의 정적 점으로 수행했기 때문입니다. 어떤 거리가 가장 작은 지 알고 픽셀의 값을 두 번째 배열에 쓰고 싶습니다. 나는 인덱스를 얻기 위해 min()을 사용했지만, 그것들을 가지고 그림에 접근하는 방법을 모른다. 나는이는 picture(1:3, 1, 1)의 나에게 가치를 줄 것이다 알고, 그래서 처음 세 개의 픽셀최소 인덱스 사용

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를 들어

. 당신이 볼 수 있듯이 midata(1)data(2) 기본적으로 data(1, 1, 1)data(2, 1, 1) 인 나는 그 indecies에 액세스

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 

수 있지만, 나는 다음과 같은 결과를

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을 사용할 수 원하는 경우

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

ans = 

    logical 

    1 

또한 단지 첨자 [x(:), y(:), mi(:)]을 사용할 수 있습니다

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 

을하지만,이 더 다루기 힘든 것 같다 문맥.