2016-12-14 2 views
0

1D 어레이로 히트 맵을 만들고 싶습니다. 이것이 내 계획입니다.
[센터 # 1, LU] = {01251074210} * LRUD = 왼쪽, 0, 1, 1, 4, 12, 7, 5, 3, 2, 1]
0, 1, 3, 6, 11, 6, 5, 3, 1}
[center # 4, RD] = {0,1,3,6,11,6,5,3,1,1}
히트 맵의 다섯 번째 색인 ([# 1] = 10, [# 2] = 12, [# 3] = 11, [# 4] = 11) 히트 맵이이 이미지와 같아야합니다.
Heatmap image
또한 첫 번째 색인 ([# 1] = 0, [# 2] = 0, [# 3] = 0, [# 4] = 0)
일 때 히트 맵이 모두 파란색임을 예측할 수 있습니다. 마지막 색인 때 거의 파란색으로 변합니다.

Matlab의 1D 배열에서 2D 행렬을 얻으려면 어떻게해야합니까? [# 1] = 0, [# 2] = 1, [# 3] = 0, [# 4] 중심에서 값을 줄이는 것은 선형이 될 수도 있고 어떤 것이 될 수도 있습니다.어떻게 1D 배열을 MATLAB의 2D 매트릭스로 변환 할 수 있습니까?

+0

실제로 무엇을 하려는지 이해할 수 없습니다. 4 개의 10x1 배열이 있습니다. 좋습니다. 결과 행렬이 어떻게 생겼습니까? – Bernhard

+0

@ Bernhard 위에 열거 한 예와 같이 히트 맵 비디오에 배열을 만들고 싶습니다.이 비디오의 첫 번째 프레임은 4 NxN 제로 행렬이고 비디오의 두 번째 프레임은 4 NxN 행렬입니다. 1의 주변 값은 균일하게 감소합니다. – hsl

+0

아직 명확하지 않습니다. 아마도 2D 행렬 (또는 적어도 그 일부)이 어떻게 생겼는지에 대한 질문에 예제를 추가 할 수 있을까요? – NLindros

답변

0

예제에 따라, 각 행렬의 중심점이 배열의 값을 얻고 모든 네 이웃이 0이 될 때까지 값이 감소하는 4 n * n 행렬을 항상 생성하려고합니다. 나는 그것을 올바르게 받았 느냐?

생성하려는 네 개의 행렬 중 하나를 생성합니까? 그렇다면 매개 변수를 수정하고 4 개의 행렬을 만들어 함께 그립니다.

% your matrix size 
size = 15 

center = (size + 1)/2 

center_value = 5 

mat_a = zeros(size,size); 
mat_a(center,center) = center_value; 
%loop all values until zero 
for ii=1:center_value -1 
    current_value = center_value - ii; 
    update_mat = mat_a; 
    % loop over matrix, check if 4-neighbors non-zero 
    for x =1:size 
    for y =1:size 
     if (mat_a(y,x) == 0) 
     has_non_zero_neighbor = false; 
     % case 1 
     if (x < size) 
      if (mat_a(y,x+1) > 0) 
      has_non_zero_neighbor = true; 
      endif 
     endif 
     % case 2 
     if (y < size) 
      if (mat_a(y+1,x) > 0) 
      has_non_zero_neighbor = true; 
      endif 
     endif 
     %case 3 
     if (x > 1) 
      if (mat_a(y,x-1) > 0) 
      has_non_zero_neighbor = true; 
      endif 
     endif 
     % case 4 
     if (y > 1) 
      if (mat_a(y-1,x) > 0) 
      has_non_zero_neighbor = true; 
      endif 
     endif 

     %if non-zeros, update matrix item value to current value 
     if (has_non_zero_neighbor == true)  
      update_mat(y,x) = current_value; 
     endif 
     endif 

    end 
    end 
    mat_a = update_mat; 

end 

figure(1) 
imshow(mat_a./center_value) 
관련 문제