2017-12-23 5 views
3

저는 matlab에서 모든 24 비트 RGB 색상 이미지를 생성하는 학교 프로젝트 용 스크립트/함수 작업을하고 있습니다.Matlab allRGB 이미지 생성

나는 이런 식으로 글을 썼지 만 천천히 (그리고 matlab은 나를 좋아하지 않고 많이 충돌한다.) 충돌 전의 마지막 시간은 5 일 동안 진행되었습니다.

a = 1; 
for r = 0:255 
    for g = 0:255 
     for b = 0:255 
      colors(a,:) = [r g b]; 
      a = a + 1; 
     end 
    end 
end 

colors = reshape(colors, [4096, 4096, 3]); 

colors = uint8(colors); 
imshow(colors); 
imwrite(colors, 'generated.png'); 

이 작업을 수행 할 수있는 빠른 방법이 있나요 : 여기 코드인가?

답변

2

repmat/repelem을 사용하여 세 개의 열을 별도로 작성한 다음 연결하십시오.

colors = [repelem((0:255).',256^2),... 
      repmat([repelem((0:255).',256) repmat((0:255).',256,1)],256,1)]; 
+0

결과는 2D입니다. 질문에서 언급했듯이 결과는 3D 여야합니다. – OmG

+1

@OmG 이것은 OP 루프의 벡터화입니다. OP가하고있는 나머지 부분은 똑같습니다. –

+0

알아,하지만 OP가 어떻게 알지?! – OmG

2

일반적으로 속도를 높이기 위해 큰 매트릭스를 미리 할당하는 것이 좋습니다. 현재 구현에서는 colors의 크기가 많은 반복 메모리 할당 리소스가 필요한 반복마다 하나의 행이됩니다. 코드 시작 부분에

colors = zeros(2^24, 3); 

으로 행렬을 정의하십시오. 메모리와 시간을 절약하기 위해 나중에 변환하는 대신 처음부터 행렬을 uint8으로 정의 할 수도 있습니다.

colors = zeros(2^24, 3, 'uint8');