현재 인터넷에서 구할수 있는 워터마킹 예제 소스는 모두 gray영상을 기반으로 하고 있는 듯합니다.
혹시 칼라영상에 칼라영상을 워터마킹 해보신분 계신가요?
어떤 방식으로 접근해야 하는지 조언을 구하고 싶습니다.
예전에 RGB를 YVU로 변환 후, Y에다가 워터마크를 삽입해 봤습니다.
구글에서 color watermarking로 검색해보니 논문이 많이 나오네요.
흑백이냐 컬러냐 하는 부분은 한 픽셀당 정보량이 얼마냐 하는 차이뿐 아닌가요?
사람의 눈이 어떠한 색이나 주파수에 민감한가, 워터마크를 하려는 목적이 무엇인가?
에 따라서 잘 생각해보면 새로운 방법을 찾을 수도 있을 것 같습니다.
YUV로 변환한후 Y에다가 워터마크를 삽입했다는 것은
워터마킹할 칼라이미지를 RGB나 다른 여러가지 변환을 하지않고 파일 자체를
Y에다가 삽입했다는 말씀이신가요?
YUV로 변환해서 Y에 넣고 다시 RGB로 변환해도 되고...
R, G, B 각각에 워터마크를 넣어도 되고요.
말씀하신데로 Y영역에 워터마크 파일을 복사해서 넣었더니
원본영상에 약간의 손실이 있는거 같지만 확인하기 힘들정도로 삽입되었습니다.
문제는 그 워터마크된 영상을 다시 YUV변환해서 Y영역에 있는 데이터를 다시 읽어와서 출력했을때
원래 워터마크 파일의 영상이 안만들어 지는데요
뭐가 잘못된거죠?
(x+w) 에서 w 를 추출하는 방법은 여러가지가 있습니다.
삽입할 워터마크를 w, 워터마크를 삽입한 그림에서 특정한 처리 (YUV변환후 Y 추출, DCT, FFT 등)
를 수행한 원본을 x라 고 해봅시다.
그럼 워터마크를 삽입한 형태는 w에 x를 더한 w+x 가 됩니다.
(w+x) 를 x 자리에 치환하여, 특정한 처리의 반대로 해주면 워터마크가 삽입된 그림을 얻을 수 있습니다.
이제, 워터마크를 추출하기 위해 동일한 처리를 수행하면 w+x를 얻을 수 있으나, (w+x) 와 x는 분명히 다릅니다.
일반적으로 (w+x)와 x의 상관도를 분석하는데, 이것이 w를 얼마나 크게 했느냐? x가 어떠한가에 따라서 그때그때 다릅니다.
따라서, (w+x)에서 x를 잘 추출하기 위한 여러가지 방법이 있는데, 이 부분은 수많은 논문을 참조하세요.
간략하게 말씀드리면, w를 x에 상관없는 신호로 만드는 방법, (w+x)에서 x를 추정하는 방법 등이 있습니다.
답변 감사합니다^^
한가지 더 질문이 있어서 글 올립니다.
워터마킹 삽입과정에서 Y영역에 워터마크 영상정보를 더한것이 아니라 그냥 덮어쓰기 하였습니다.
덮어쓰기 하고나서 다시 YUV에서 RGB로 변환하고, 확인하기 위해서 바로 이어서 YUV로 다시 변환해서
Y영역을 파일로 써보니깐 덮어썼던 정보는 없어지고 원래의 Y정보 일부분이 들어있었습니다.
왜 이런지 혹시 아시나요?
한 10년 전에 워터마킹이란게 뭔지도 모르고 아래 프로그램을 만들었었습니다. 아이디어를 갖고 실제 개발 기간 거의 하루만에 뚝딱 만들고는 손도 안대놓고 올려 놓은거라 버그가 무척 많아요.http://sourceforge.net/projects/secretpicture/
잘 아시겠지만, seoleda 님 말씀대로 RGB를 YUV로변환하면 Y영역은 인간의 눈으로 그 값의 차이를 잘 파악할 수 없으니까 거기에 데이터를 추가하면, 인간의 눈으로는 거기에 어떤 정보가 있는지 알 수 가 없지요.
결국, 어떤 정보이든 그 각 bit를 워터마킹하려는 대상 이미지 각 픽셀의 Y영역에 넣으면 저의 프로그램처럼 그림 안에다가 텍스트 메시지를 넣을 수 도 있게 되는거죠.
나중에 알고보니 워터마킹에 대한 많은 논문이 있더군요. 워터마킹된 이미지를 resize하는 경우에도 최소한의 손실로 삽입된 정보를 복구하기 위한 처리 등, 보다 깊은 수준의 논문들이 있는것 같습니다.
------------------------------------------------- $yes 4 8 15 16 23 42
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
예전에 RGB를 YVU로
예전에 RGB를 YVU로 변환 후, Y에다가 워터마크를 삽입해 봤습니다.
구글에서 color watermarking로 검색해보니 논문이 많이 나오네요.
흑백이냐 컬러냐 하는 부분은 한 픽셀당 정보량이 얼마냐 하는 차이뿐 아닌가요?
사람의 눈이 어떠한 색이나 주파수에 민감한가, 워터마크를 하려는 목적이 무엇인가?
에 따라서 잘 생각해보면 새로운 방법을 찾을 수도 있을 것 같습니다.
YUV로 변환한후
YUV로 변환한후 Y에다가 워터마크를 삽입했다는 것은
워터마킹할 칼라이미지를 RGB나 다른 여러가지 변환을 하지않고 파일 자체를
Y에다가 삽입했다는 말씀이신가요?
컬러도 차이 없는데...
YUV로 변환해서 Y에 넣고 다시 RGB로 변환해도 되고...
R, G, B 각각에 워터마크를 넣어도 되고요.
말씀하신데로
말씀하신데로 Y영역에 워터마크 파일을 복사해서 넣었더니
원본영상에 약간의 손실이 있는거 같지만 확인하기 힘들정도로 삽입되었습니다.
문제는 그 워터마크된 영상을 다시 YUV변환해서 Y영역에 있는 데이터를 다시 읽어와서 출력했을때
원래 워터마크 파일의 영상이 안만들어 지는데요
뭐가 잘못된거죠?
(x+w) 에서 w 를
(x+w) 에서 w 를 추출하는 방법은 여러가지가 있습니다.
삽입할 워터마크를 w, 워터마크를 삽입한 그림에서 특정한 처리 (YUV변환후 Y 추출, DCT, FFT 등)
를 수행한 원본을 x라 고 해봅시다.
그럼 워터마크를 삽입한 형태는 w에 x를 더한 w+x 가 됩니다.
(w+x) 를 x 자리에 치환하여, 특정한 처리의 반대로 해주면 워터마크가 삽입된 그림을 얻을 수 있습니다.
이제, 워터마크를 추출하기 위해 동일한 처리를 수행하면 w+x를 얻을 수 있으나, (w+x) 와 x는 분명히 다릅니다.
일반적으로 (w+x)와 x의 상관도를 분석하는데, 이것이 w를 얼마나 크게 했느냐? x가 어떠한가에 따라서 그때그때 다릅니다.
따라서, (w+x)에서 x를 잘 추출하기 위한 여러가지 방법이 있는데, 이 부분은 수많은 논문을 참조하세요.
간략하게 말씀드리면, w를 x에 상관없는 신호로 만드는 방법, (w+x)에서 x를 추정하는 방법 등이 있습니다.
답변
답변 감사합니다^^
한가지 더 질문이 있어서 글 올립니다.
워터마킹 삽입과정에서 Y영역에 워터마크 영상정보를 더한것이 아니라 그냥 덮어쓰기 하였습니다.
덮어쓰기 하고나서 다시 YUV에서 RGB로 변환하고, 확인하기 위해서 바로 이어서 YUV로 다시 변환해서
Y영역을 파일로 써보니깐 덮어썼던 정보는 없어지고 원래의 Y정보 일부분이 들어있었습니다.
왜 이런지 혹시 아시나요?
한 10년 전에
한 10년 전에 워터마킹이란게 뭔지도 모르고 아래 프로그램을 만들었었습니다.
아이디어를 갖고 실제 개발 기간 거의 하루만에 뚝딱 만들고는 손도 안대놓고
올려 놓은거라 버그가 무척 많아요.
http://sourceforge.net/projects/secretpicture/
잘 아시겠지만, seoleda 님 말씀대로 RGB를 YUV로변환하면 Y영역은
인간의 눈으로 그 값의 차이를 잘 파악할 수 없으니까 거기에 데이터를
추가하면, 인간의 눈으로는 거기에 어떤 정보가 있는지 알 수 가 없지요.
결국, 어떤 정보이든 그 각 bit를 워터마킹하려는 대상 이미지 각 픽셀의 Y영역에 넣으면
저의 프로그램처럼 그림 안에다가 텍스트 메시지를 넣을 수 도 있게 되는거죠.
나중에 알고보니 워터마킹에 대한 많은 논문이 있더군요.
워터마킹된 이미지를 resize하는 경우에도 최소한의 손실로
삽입된 정보를 복구하기 위한 처리 등, 보다 깊은 수준의 논문들이
있는것 같습니다.
-------------------------------------------------
$yes 4 8 15 16 23 42
-------------------------------------------------
$yes 4 8 15 16 23 42
-----------------------------
-------------------------------------------------
$yes 4 8 15 16 23 42
-------------------------------------------------
$yes 4 8 15 16 23 42
댓글 달기