파이썬으로 오리지널 랜덤 도트 스테레오그램(RDS)을 만듭니다.
13895 단어 랜덤 도트 스테레오그램파이썬OpenCVnumpy
랜덤 도트 스테레오그램(RDS)
오리지널 업로드자는 독일어판 위키피디아의 LosHawlos씨 - de.wikipedia에서 커먼즈로 이동되었습니다. , CC 디스플레이-상속 3.0, htps : // 코몬 s. 으아아아아. rg / w / 어서 x. php? 쿠리 d=1966500
당신에게 보일까요?
눈의 초점을 앞뒤로 옮기면 그림이나 문자가 떠오르는 (입체로 보이는) 녀석입니다.
스마트폰에서 보는 사람은 죄송합니다. PC에서 봐.
이것을 자작해보고 싶다.
아래의 사이트에 Python에서의 구현예가 있었으므로, 참고로 하여 오리지널의 랜덤 닷 스테레오그램을 만들어 보았다.
사용하는 것
import numpy as np
import matplotlib.pyplot as plt
import cv2
Notebook 형식으로 실험하고 있어, 이미지를 표시시키기 위해서 익숙하다.
절차
1. 랜덤 패턴 만들기
def make_pattern(shape=(16, 16)):
return np.random.uniform(0, 1, shape)
실행해보십시오.
pattern = make_pattern((400,400))
plt.imshow(pattern, cmap='gray')
이미 무언가가 떠오를 것 같다.
2. 떠오르게 하는 패턴을 작성
def make_depthmap(shape=(400, 600)):
depthmap = np.zeros(shape, dtype=np.float)
cv2.circle(depthmap, (int(shape[1]/2), int(shape[0]/2)), 100, (255 ,255, 255), -1)
return depthmap
실행해보십시오.
depthmap = make_depthmap()
plt.imshow(depthmap, cmap='gray')
이 녀석이 떠오를 것이다.
3. 해보았다
def make_autostereogram(depthmap, pattern, shift_amplitude=0.1, invert=False):
"Creates an autostereogram from depthmap and pattern."
depthmap = normalize(depthmap)
if invert:
depthmap = 1 - depthmap
autostereogram = np.zeros_like(depthmap, dtype=pattern.dtype)
for r in np.arange(autostereogram.shape[0]):
for c in np.arange(autostereogram.shape[1]):
if c < pattern.shape[1]:
autostereogram[r, c] = pattern[r % pattern.shape[0], c]
else:
shift = int(depthmap[r, c] * shift_amplitude * pattern.shape[1])
autostereogram[r, c] = autostereogram[r, c - pattern.shape[1] + shift]
return autostereogram
def normalize(depthmap):
return depthmap/255
메인의 처리는 서두에 든 참고 사이트로부터 인용했습니다.
실행해보십시오.
autostereogram = make_autostereogram(depthmap, pattern, 0.3)
plt.imshow(autostereogram, cmap='gray')
확실히 원표가 떠오르고 있다.
(교차법이라고 해, 눈의 초점을 가까이 하는 방법에서는 원표가 오목해 보입니다.)
모처럼이기 때문에
텍스트를 랜덤 도트 스테레오그램으로 해 보았다.
def make_text_depthmap(shape=(400, 600), text='Q i i t a'):
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(depthmap, text, (50, 250), font, 4, (255,255,255), 12, cv2.LINE_AA)
return depthmap
떠오르는 것.
depthmap_text = make_text_depthmap()
plt.imshow(depthmap, cmap='gray')
실행해보십시오.
autostereogram = make_autostereogram(depthmap_text, pattern, 0.05)
plt.imshow(autostereogram, cmap='gray')
아까의 원표보다 조금 멍하니 있지만, 보인다.
엔지니어 여러분에게 퀴즈
얼마나 쓰여 있을까요? ? 텍스트입니다.
대답은 코멘트란에서 기다리고 있습니다^^
추가
속편을 썼습니다.
import numpy as np
import matplotlib.pyplot as plt
import cv2
1. 랜덤 패턴 만들기
def make_pattern(shape=(16, 16)):
return np.random.uniform(0, 1, shape)
실행해보십시오.
pattern = make_pattern((400,400))
plt.imshow(pattern, cmap='gray')
이미 무언가가 떠오를 것 같다.
2. 떠오르게 하는 패턴을 작성
def make_depthmap(shape=(400, 600)):
depthmap = np.zeros(shape, dtype=np.float)
cv2.circle(depthmap, (int(shape[1]/2), int(shape[0]/2)), 100, (255 ,255, 255), -1)
return depthmap
실행해보십시오.
depthmap = make_depthmap()
plt.imshow(depthmap, cmap='gray')
이 녀석이 떠오를 것이다.
3. 해보았다
def make_autostereogram(depthmap, pattern, shift_amplitude=0.1, invert=False):
"Creates an autostereogram from depthmap and pattern."
depthmap = normalize(depthmap)
if invert:
depthmap = 1 - depthmap
autostereogram = np.zeros_like(depthmap, dtype=pattern.dtype)
for r in np.arange(autostereogram.shape[0]):
for c in np.arange(autostereogram.shape[1]):
if c < pattern.shape[1]:
autostereogram[r, c] = pattern[r % pattern.shape[0], c]
else:
shift = int(depthmap[r, c] * shift_amplitude * pattern.shape[1])
autostereogram[r, c] = autostereogram[r, c - pattern.shape[1] + shift]
return autostereogram
def normalize(depthmap):
return depthmap/255
메인의 처리는 서두에 든 참고 사이트로부터 인용했습니다.
실행해보십시오.
autostereogram = make_autostereogram(depthmap, pattern, 0.3)
plt.imshow(autostereogram, cmap='gray')
확실히 원표가 떠오르고 있다.
(교차법이라고 해, 눈의 초점을 가까이 하는 방법에서는 원표가 오목해 보입니다.)
모처럼이기 때문에
텍스트를 랜덤 도트 스테레오그램으로 해 보았다.
def make_text_depthmap(shape=(400, 600), text='Q i i t a'):
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(depthmap, text, (50, 250), font, 4, (255,255,255), 12, cv2.LINE_AA)
return depthmap
떠오르는 것.
depthmap_text = make_text_depthmap()
plt.imshow(depthmap, cmap='gray')
실행해보십시오.
autostereogram = make_autostereogram(depthmap_text, pattern, 0.05)
plt.imshow(autostereogram, cmap='gray')
아까의 원표보다 조금 멍하니 있지만, 보인다.
엔지니어 여러분에게 퀴즈
얼마나 쓰여 있을까요? ? 텍스트입니다.
대답은 코멘트란에서 기다리고 있습니다^^
추가
속편을 썼습니다.
def make_text_depthmap(shape=(400, 600), text='Q i i t a'):
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(depthmap, text, (50, 250), font, 4, (255,255,255), 12, cv2.LINE_AA)
return depthmap
depthmap_text = make_text_depthmap()
plt.imshow(depthmap, cmap='gray')
autostereogram = make_autostereogram(depthmap_text, pattern, 0.05)
plt.imshow(autostereogram, cmap='gray')
얼마나 쓰여 있을까요? ? 텍스트입니다.
대답은 코멘트란에서 기다리고 있습니다^^
추가
속편을 썼습니다.
한층 더 속편을 썼습니다.
Reference
이 문제에 관하여(파이썬으로 오리지널 랜덤 도트 스테레오그램(RDS)을 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KR_bangkok/items/39d981d93c68fd360fa9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)