PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2014/11/09 00:50:00
Name 낙화
File #1 캡처.PNG (13.4 KB), Download : 16
Subject [질문] abcdef라는 데이터로 cdefab를 찾으려면?



안녕하세요.

4학년 2학기 졸업과제를 진행중인 공대생입니다.

졸업과제로 위조 영상 찾는 것을 매트랩으로 하고 있는데요.

1학기때는 회전하지 않고 copy-move한 위조영상을 찾는 과제를 했었는데, 논문을 보고 그 방법을 따라해보는 것이었습니다.

제가 봤던 논문은 그냥 copy-move뿐만 아니라 copy해서 회전시키고 move한 것 까지 어느정도 찾을수 있는 거였는데...

2학기때는 copy-rotate-paste 된 사진을 찾는 것을 과제로 내주셔서... '오 1학년때 한거 그대로 하면 되겠네' 했는데

교수님 연구실에서 자체적으로 개발한 함수를 사용해서 하라는 조건을 거셨습니다.(쓰는게 필수는 아니지만 권장한다. 라는 말씀을 하심)

----------------------

여기까지는 배경설명이고요.

이 함수를 쓰게되면 1픽셀에 N개의 데이터가 나오는데요 N은 '몇도마다 데이터를 측정하냐' 라서 2개부터~360개까지 제가 조절할 수 있습니다.   N = 18, 36, 72 정도를 쓰게 될것 같구요.

  N이 적으면 처리하는 시간이 줄어들고, N이 크면 시간은 오래걸리지만 조금 더 정확한 정보를 얻을 수 있는거죠.

  N이 6이라고 했을때 (1,1)위치에 있는 픽셀에서 a b c d e f 의 데이터가 나오고, (123,12)위치의 픽셀에서 a b c d e f 의 데이터가 나왔을 경우에

(1,1)과 (123,12)의 픽셀이 똑같이 복사된 것이다 라고 찾는 방식인데요.

찾는 방식은 픽셀 데이터간의 유클리드거리를 비교해서 가장 작은 값을 가지는 픽셀을 찾았습니다. 회전하지 않으면 유클리드거리는 0이 나옴.


회전하면 약간 문제가 바뀝니다.

a b c d e f 라는 데이터가 회전을 하면 b c d e f a 라는 데이터가 됩니다. 회전하는 각도에 따라서 c d e f a b 나 d e f a b c가 될 수 도 있어요. 한칸씩 밀립니다.

여기서 a b c d e f 로 c d e f a b 를 어떻게 찾을 수 있을까요.

제가 가장 해본 방법은 단순하게 각각의 데이터를 정렬(Sorting)시켜서 각각의 유클리드 거리를 비교해서 찾는건데요.

(abcdef를 크기순으로 정렬했을떄 abcdef면 cdefab도 정렬 할때 abcdef로 됨.)



이게 그림파일이 작을때는 어느정도 찾는데 500*300정도로 커지니까 비교해야할 픽셀수가 10만개가 넘어가니

순서대로 bcedfa인걸 찾아야하는데 순서가 뒤죽박죽인 adefbc도 똑같다고 찾기 때문에 정확도가 떨어지고,

또 회전을 시키면 값이 조금씩 왜곡 되서 a b c d e f가 b c d e f a가 되는게 아니라 b-1 c+2 d-3 e+1 f-3 a+1 이렇게 바뀌기 때문에

N값을 360으로 올린다고 해도 시간만 많이 잡아먹지 제대로 된 데이터를 찾지 못하더라구요.



어떻게 하면 될까요?

내내 고민중인데 딱히 생각이 안 떠올라서 미치겠네요.

정 안되면 1학기땐 썼던 방법으로 하면 되긴 한데,

졸업과제만 무사히 끝내면 졸업하는데 여러분의 도움이 필요합니다.

이해가 잘 되게 썼는지는 모르겠네요 ㅠㅠ

읽어주셔서 감사합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
소인배
14/11/09 00:58
수정 아이콘
THRESH=2

def data_eq?(p1, p2):
for mod_p1 in p1.cyclic_permutations:
if sqrt((mod_p1-p2).map{|elem| elem**2}.sum)<THRESH
return true
return false

대충 pseudocode인데, 이런 식으로 하는 건 어떨까요?
azurespace
14/11/09 00:59
수정 아이콘
쉽네요. abcdef를 두번 붙여서 abcdefabcdef로 만들고 그 안에 찾으시는 데이터가 있는지 검색하면 선형시간이네요.

다시 보니까 exact 매치가 아니라 선형은 아니네요. 그래도 뭐 비슷합니다. 픽셀값의 차이를 바탕으로 적절한 거리를 매기면 되겠죠

두번 붙이는 이유는 그렇게 하면 원래 데이터의 모든 rotation들을 substring으로 갖게 되기 때문입니다. 냠.
14/11/09 01:17
수정 아이콘
감사합니다.
그러면 abcdef로 abcdef만을 찾는 것 보다는 N배의 비교가 더 필요한 것 같은데, 제가 이해한게 맞나요?
14/11/09 01:19
수정 아이콘
matching algorithm을 스마트하게 가져가면 비교회수를 2배보다 더 많이 늘리지 않고 (정확히는 O(N1+N2) 정도에) 해결할 수 있습니다. KMP 알고리즘이나 Suffix array 등의 문자열 처리 알고리즘에 대해 검색해보시면 됩니다.
14/11/09 01:27
수정 아이콘
데이터가 shift되면서 값이 조금씩 바뀌기 때문에 바뀌기 전이랑 정확하게 1:1매칭이 되는것이 아니라서...
모든 substring들의 유클리드 거리를 서로 비교해보고 가장 작은 값을 찾는 식으로 해야할 것 같습니다.
그래도 써주신 내용은 알고리즘 공부하는데 많은 도움이 될 것 같습니다.
감사합니다!
azurespace
14/11/09 02:26
수정 아이콘
그런데 변형이 일어나도 어느정도는 비슷하다는 전제가 있기 때문에, 어떤 픽셀값이 threshold 이상으로 차이가 나면 그 뒤 픽셀들은 비교를 하지 않아도 되겠죠? 탐색시간이 많이 줄어들 것으로 생각합니다.
14/11/09 02:29
수정 아이콘
일단 적절한 threshold 값을 찾는게 중요하겠네요. 답변 감사합니다. 도움이 많이 됬습니다.
azurespace
14/11/09 02:44
수정 아이콘
그리고 깊게 생각은 안 해봤지만 (x+a)^2=x^2+2ax+a^2이기 때문에 적절한 전처리를 미리 해 둔다면 시간복잡도를 줄일 수도 있지 않을까 싶은데요

그러니까 비교를 시작하는 위치가 한칸씩 뒤로 이동할 때마다 유클리드 거리를 훨씬 빠르게 알아낼 수 있지 않을까 싶어요
14/11/09 03:08
수정 아이콘
잘 이해가 안 되서 그런데..
x^2과 a^2항은 다음 유클리드 거리 식때도 바뀌지 않으니 중간의 2ax값들만 구하면 된다는 말씀이신가요?
azurespace
14/11/09 03:14
수정 아이콘
일단은 그런데.... 딱히 ax항을 빨리 구할 방법은 떠오르질 않네요 a도 x도 같이 바뀌니까... 이건 그냥 sse같은 simd 명령어로 빨리 철리하는 정도에서 만족해야 할 듯해요
14/11/09 03:20
수정 아이콘
참고하겠습니다!
교수님은 '처리시간이 얼마나 걸리든 정확하게만 찾을 수 있도록 해라, 너희들에게 프로그래밍 실력을 바라는게 아님' 이라고 말하시지만, 우선 처리시간이 느리면 제가 답답하니...
답변 감사합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
55545 [질문] 연봉 계산에 대해서.. [6] 곰비1409 15/03/11 1409
55492 [질문] 노래에 일가견 있으신 분들, '윤종신 - 고요' 랑 비슷한 노래 추천좀 해주세요. [4] 화이트데이1595 15/03/10 1595
54748 [질문] [애니] 일어 청해 되시는 분들 노래 가사 뭐라고 들리는지 알려주세요! [5] 페르디난트 3세1579 15/02/28 1579
52213 [질문] 수미칩 허니머스타드 맛이 어때요 ? [21] Dj KOZE2156 15/01/22 2156
51997 [질문] 토익 독학 질문입니다! [2] Swings1157 15/01/19 1157
50629 [질문] [영상] 이런 상황은 정당방위가 성립될까요? [21] 김첼시2625 14/12/30 2625
50005 [질문] avicii의 levels 에 나오는 춤을 뭐라고 하나요? halogen1046 14/12/21 1046
49995 [질문] 게임 포탈 엑스박스 타이틀 질문입니당~ [5] 달달한고양이647 14/12/21 647
49177 [질문] SF 영화사에서 비주얼 적으로 한획을 그은 영화는 [26] possible1984 14/12/10 1984
48432 [질문] 쓰고 있는 인텔 3240에 중고 4870을 사서 끼면 어떨까요? [4] 회전목마1121 14/11/30 1121
47452 [질문] 블랙 프라이데이때 fm2015가 풀릴까요? [2] aSlLeR2233 14/11/17 2233
46734 [질문] abcdef라는 데이터로 cdefab를 찾으려면? [11] 낙화853 14/11/09 853
45859 [질문] 매트랩 질문드립니다. [3] 낙화1079 14/10/28 1079
45818 [질문] 사기죄가 성립이 될까요? [18] 로맨스가필요해1680 14/10/28 1680
45285 [질문] 모토 360 사용자 계신가요? [4] 한진오1014 14/10/21 1014
43897 [질문] 구원파 수준의 종교 단체가 국제적 상과 학계의 칭송을 받는 현상에 대해 [8] nameless..1894 14/10/03 1894
43383 [질문] 프린터 토너 어떻게 구매하는게 가장 싸고 좋을까요? [14] Toby3023 14/09/26 3023
42417 [질문] 게임 패드로 할만한 게임이 뭐있을까요 ? [13] 이것봐라2479 14/09/13 2479
42295 [질문] 플스3나 xbox 360 롤플레잉 추천 부탁드립니다 [10] 이블린1008 14/09/11 1008
41761 [질문] 노트북 포맷 후 드라이버 설치 따로 필요 없나요? [1] 지포스2955 14/09/04 955
41414 [질문] 케이티페리 노래 질문입니다 (동영상있음) [2] YORDLE ONE592 14/08/31 592
40464 [질문] 음악 질문입니다 ㅠㅠ [2] 삼성그룹638 14/08/18 638
40403 [질문] 노래 질문입니다. [2] 삼성그룹682 14/08/17 682
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로