[matlab] ZigZag-Scanning (2-D Array)
Attachment '12' |
|
---|
[MatLab] ZigZag-Scanning (2-D Array)
# ZigZag-Scanning 과제 내용
주어진 2차원 배열을 다음 그림과 같이 지그재그 형태로 탐색하여 1차원 배열의 결과물을 만드는 MatLab 코드를 만들어야 함.
[이미지] https://en.wikipedia.org/wiki/JPEG
[참고] https://en.wikipedia.org/wiki/File:JPEG_ZigZag.svg
# MatLab 실행 영상
# 구현 방법
다음과 같은 2차원(3x3) 배열 Q가 있다고 할 때,
1. 원본 Q 배열의 좌/우를 뒤집는다. (fliplr() 함수 사용)
결과는 다음 afterFliplr1 과 같다.
2. 위의 1번의 결과 배열에서 대각 배열을 만든다. (spdiags() 함수 사용)
결과는 다음 afterSpdiags 와 같다.
![no_03.png](https://www.hooni.net/xe/files/attach/images/207/918/074/47f1d06633650eb51fa99ffb891579ca.png)
3. 위의 2번의 결과 배열의 좌/우를 뒤집는다. (fliplr() 함수 사용)
결과는 다음 afterFliplr2 와 같다.
![no_04.png](https://www.hooni.net/xe/files/attach/images/207/918/074/0c8b8dab1f5d1e2aa099ef3bb2779e09.png)
4. 위의 3번의 결과 배열의 홀수번째 컬럼의 위/아래를 뒤집는다. (flipud()함수 사용)
결과는 다음 afterFlipud 과 같다.
![no_05.png](https://www.hooni.net/xe/files/attach/images/207/918/074/3291fd8e38c8483778363ffe377043cd.png)
5. 위의 5번의 결과 배열에서 0을 제거하고 1차원 배열로 출력한다.
결과는 다음 orderNonZero 와 같다.
![no_06.png](https://www.hooni.net/xe/files/attach/images/207/918/074/76edaeb5681221587d59c9e581519a2f.png)
6. 위의 5번의 결과는 Q 배열을 탐색하는 인덱스의 순서이다.
MatLab에서 배열 인덱스는 1부터 시작하므로,
원본 Q 배열을 orderNonZero 인덱스의 순서대로 탐색하여 Zig-Zag 1차원 배열을 만들 수 있다.
결과는 다음 ZigZag 와 같다.
# MatLab 소스코드 (Ver.1)
clear all; clc; %% Test elements #1 Q = [1 2 3; 4 5 6; 7 8 9]; %% Test elements #2 Q = [01 02 06 07; 03 05 08 13; 04 09 12 14; 10 11 15 16]; %% Init tmp = reshape(1:numel(Q), size(Q)); %% Flip left/right -> Diagonal matrix -> Flip left/right again afterFliplr1 = fliplr( tmp ); afterSpdiags = spdiags( afterFliplr1 ); afterFliplr2 = fliplr( afterSpdiags ); %% Flip up/down(odd columns) afterFlipudOdd = afterFliplr2; afterFlipudOdd(:,1:2:end) = flipud( afterFliplr2(:,1:2:end) ); %% Remove zero orderNonZero = afterFlipudOdd; orderNonZero( orderNonZero==0 ) = []; %% Get elements (by zigzag-order) ZigZag = Q(orderNonZero) %keyboard
# MatLab 소스코드 (Ver.2)
clear all; clc; %% ZigZag %% %% Test array1 Q = [1 2 3; 4 5 6; 7 8 9]; %% Test array2 Q = [01 02 06 07; 03 05 08 13; 04 09 12 14; 10 11 15 16]; %% Init tmp = reshape(1:numel(Q), size(Q)); %% Flip left/right -> Diagonal matrix -> Flip left/right again order = fliplr( spdiags( fliplr(tmp) ) ); %% Flip up/down(odd columns) order(:,1:2:end) = flipud( order(:,1:2:end) ); %% Remove zero order(order==0) = []; %% Get elements (by zigzag-order) ZigZag = Q(order) keyboard
# 관련 함수 설명
![fliplr.png](https://www.hooni.net/xe/files/attach/images/207/918/074/dcfce0e15380f613f3098eb03d5993c1.png)
![spdiags.png](https://www.hooni.net/xe/files/attach/images/207/918/074/07274bbfbd84cdfed8ba1c0957b845ac.png)
![flipud.png](https://www.hooni.net/xe/files/attach/images/207/918/074/e734ebb44f234cbdbda8cebc83f93dd2.png)
No. | Category | Subject | Author | Date | Views |
---|---|---|---|---|---|
157 | Develop | [js] 초간단 암호화/복호화 소스.. | hooni | 2003.04.23 | 8872 |
156 | Develop | [js] 초간단 현재 사이트 쿠키 확인하는 명령~ | hooni | 2003.04.23 | 7341 |
155 | Develop | [js] 쿠키(cookie)에 대한 설명과 예제.. | hooni | 2003.04.23 | 8346 |
154 | Develop | [js] 큐 형식으로 배열사용.. ㅋㅋ | hooni | 2013.04.23 | 7043 |
153 | Develop | [js] 키보드 아스키 코드 확인하는 간단한 소스 | hooni | 2003.04.23 | 7790 |
152 | Develop | [js] 키보드 아스키코드(ASCII) 코드보기 | hooni | 2003.04.23 | 32507 |
151 | Develop |
[js] 툴팁.. 좋은거.. (tooltip)
![]() |
hooni | 2013.04.23 | 7077 |
150 | Develop | [js] 파이어폭스(Firefox;F/F)에서 outerHTML 작동하도록 만든 메소드 | hooni | 2013.04.23 | 16467 |
149 | Develop | [js] 폼(form) 전송시 중복 클릭 방지 간단한 구문 | hooni | 2013.04.23 | 9327 |
148 | Develop |
[js] 한글문서로 된 259가지 자바스크립트 예제파일
![]() |
hooni | 2013.04.23 | 6776 |
147 | Develop | [js] 한글주소(URL) 인코딩(encode, Encoding), 자바스크립트(JavaScript) | hooni | 2013.04.23 | 11345 |
146 | Develop | [js] 핫키(단축키) 구현방법 | hooni | 2003.04.23 | 7652 |