2011-12-05 4 views
1

uint8 배열로 이미지 데이터를 저장하는 방법은 무엇입니까? 직사각형이 아닌 희미한 원형 이미지가 있다고 가정 해 보겠습니다. 그래서 원을 넘어서는 픽셀 데이터가 없습니다. 최상위 픽셀 위치를 어떻게 이동합니까? 최하층? Etc ... 그리고이 이미지는 원형 일 필요는 없으며, 모호하고 비 기하학적 인 무언가 일 수 있습니다.matlab image uint8 맨 왼쪽/위/아래/오른쪽 픽셀 위치를 찾는 배열

+0

당신은 더 명확하게 이미지의 테두리를 정의해야합니다 : 가정 실종 픽셀은 여기의 위/아래/좌/우 좌표 제로입니다. 그것은 몇 가지 수식을 따르십니까? – Beginner

+0

@Beginner 아니오, 불행히도 그것은 완전히 무작위입니다. 나는 정상적인 이미지에서 가장 두드러진 물체를 잘라내는 돌출 맵을 사용하고 있습니다. 따라서이 자른 이미지에는 상상할 수있는 모양이있을 수 있습니다. – mugetsu

+0

보다 일반적인 대답은 [이 질문] (http://stackoverflow.com/a/16985818/376454)을 참조하십시오. – Wok

답변

8

이미지가로드 된 열로 이러한 모든 값 v(c(i):(c(i+1)-1))이 속한 열 c의 초기 목록 행 x 열 x RGB의 배열로 변환합니다.

[top_col, top_row]= find(sum(I,3)', 1); 
[bottom_col, bottom_row]= find(sum(I,3)', 1, 'last'); 
[left_row, left_col]= find(sum(I,3), 1); 
[right_row, right_col]= find(sum(I,3), 1, 'last'); 
+0

나는이 코드가 어떻게 작동하는지 알지 못합니다. – WantIt

+0

'find (x, 1)'는 래스터 스캔 후 첫 번째 0이 아닌 좌표를 반환합니다. – cyborg

+0

이것들은 어떻게 같은가요? 나는 그들이 동일해야한다고 생각하지 않는다. [left_row, left_col] = find (sum (I, 3), 1); [right_row, right_col] = 찾기 (합계 (I, 3), 1, '마지막'); 및 [top_col, top_row] = find (sum (I, 3) ', 1); [bottom_col, bottom_row] = 찾기 (합계 (I, 3) ', 1,'last '); –

1

이미지를 저장할 때 sparse 행렬을 사용해야한다고 생각합니다. 원하는 위치에만 픽셀을 저장합니다.

스파 스 매트릭스 그렇게 저장되어 값

  • 목록. v
  • i
  • v(j)의 행이되도록 행 인덱스 r의 목록 r(j)
+0

0이 아닌 픽셀의 비율이 높기 때문에 전체 행렬보다 많은 공간을 사용할 수 있습니다. – cyborg

+0

"애매한"이미지를 갖는 데 드는 비용입니다. – Oli

+0

질문을 변경 했습니까? – Oli