2012-06-29 2 views
-2

나는 640x480 이미지가 있고 16x16 블록으로 나누고 싶은 숙제가 있습니다. 누군가 어떻게 할 수 있습니까? 가능하면 루프를 피하고 싶습니다. 나는 그것을하기 위해 몇 시간 동안 노력했지만 행운은 없다 ...Matlab - 서브 매트릭스로 분리 된 매트릭스

+2

확인 아, 그래서, 당신은 실제로 당신이 그것을 할 수있는 코드를 제공하는 사람을 원하는 가정 벤이 그랬던 것처럼 , 그것에 대해 생각하지 않고 ... 여기에서 시작하는 좋은 방법이 아닙니다. – CTZStef

+0

다음에 시도한 코드를 포함시켜야합니다. 그것이 작동하지 않더라도. 문제 진단에 도움이되는 코드를 * 표시해야합니다. 또한 글을 올리는 것은 당신이 그것에 노력을 기울 였는지를 보여주고 누군가에게 당신을 위해 숙제를하라고 요구하는 것이 아니라는 것을 보여줍니다. (숙제의 목적을 완전히 잃었으므로 그와 같은 게시물은 많이 투표하는 경향이 있습니다.) – Leigh

+1

similar/related questions : [Matlab에서 blockproc 대신 사용할 수 있습니까?] (http://stackoverflow.com/ q/11238828/97160), [MATLAB - 병합 부분 행렬] (http://stackoverflow.com/q/6283918/97160), [이미지를 MATLAB에서 블록으로 나누는 방법?] (http://stackoverflow.com/ q/1637000/97160) – Amro

답변

1

이 방법은 모범 사례는 아니지만 원하는 경우 할 수있는 방법입니다. 결과로 나오는 2 차원 행렬에서 40 x 30이 될 각 16x16 블록을 호출 할 수 있습니다.

참고 : 이것은 일부 입력 된 코드 일 뿐이므로 직접 테스트하지 않았습니다.

당신이 셀 어레이로 구문 분석하려면 당신이 뭔가를 할 수 있습니다 :

%Original Image 
Image = imread(somefilename); 

%Block size desired (16x16) 
bsize = 16; 

% 40 and 30 come from dividing the 640 and 480 by 16 since you want 16x16 blocks. 
% result = mat2cell(Y, bsize*ones(1,40), bsize*ones(1,30)) 
result = mat2cell(Y, bsize*ones(1,size(Image,1)/bsize), bsize*ones(1,size(Image,1)/bsize)); 
+0

많은 도움을 주신 덕분에 –

+2

"내 뇌를 사용할 필요가 없도록 코드를 제공하십시오."라는 의미로 도움이된다면. – CTZStef

3

나는 Matlab 함수 blockproc을 사용하는 것이 최선이라고 생각한다. 블록을 실제로 얻고 싶다면 matlab 코드를 파헤쳐보십시오.하지만 이미지에 일부 처리 기능을 적용하고 싶습니까? 이미지 압축을 한 번 해보고 압축 함수와 블록 크기를 매개 변수로 지정하여 blockproc을 호출한다고 가정 해 보겠습니다.

이미지 처리 도구 상자를 사용할 수 없거나 블록을 가져오고 싶다면 here을 참조하십시오. 질문을 실제로 여러 번 요청했습니다 (검색하는 데 귀찮았습니까 ??).