[matlab] ZigZag-Scanning (2-D Array)
첨부 '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 와 같다.
3. 위의 2번의 결과 배열의 좌/우를 뒤집는다. (fliplr() 함수 사용)
결과는 다음 afterFliplr2 와 같다.
4. 위의 3번의 결과 배열의 홀수번째 컬럼의 위/아래를 뒤집는다. (flipud()함수 사용)
결과는 다음 afterFlipud 과 같다.
5. 위의 5번의 결과 배열에서 0을 제거하고 1차원 배열로 출력한다.
결과는 다음 orderNonZero 와 같다.
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
# 관련 함수 설명
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
897 | Database | [mysql] CPU 점유율이 높을 때 확인할 내용 | hooni | 2015.08.26 | 6777 |
896 | System/OS | [ms-sql] 프로시져 예제.. | hooni | 2013.04.23 | 13507 |
895 | System/OS | [ms-sql] 서브스트링(substring), 프로시저(SP) 작성 예제 | hooni | 2013.04.23 | 41398 |
894 | Develop | [maven] Mac OS에 메이븐(maven) 설치하기 | hooni | 2015.01.21 | 1224 |
893 | Develop | [matlab] 정보은닉 스테가노그래피(Steganography) 수업 | hooni | 2016.10.03 | 791 |
» | Develop | [matlab] ZigZag-Scanning (2-D Array) | hooni | 2016.10.15 | 2117 |
891 | System/OS | [mac][추천 무료앱] 구름 입력기 - 국내 맥 사용자를 위한 한글 대안 입력기 1 | hooni | 2015.01.04 | 2311 |
890 | System/OS | [mac] 패키지 매니저, MacPort | hooni | 2015.01.03 | 1131 |
889 | System/OS | [mac] 컨텍스트(Context) 메뉴 "다음으로 열기" 내용 정리 | hooni | 2013.07.10 | 18904 |
888 | System/OS | [mac] 맥에서 슬립(잠자기) 모드 진입을 막는 방법~ | hooni | 2013.10.10 | 31297 |
887 | System/OS | [mac] 맥에서 기본 실행 앱 변경하기 | hooni | 2018.03.02 | 1970 |
886 | System/OS | [mac] 맥에서 APM(apache,php,mysql) 구성하기 | hooni | 2013.04.23 | 38833 |