파이썬으로 오리지널 랜덤 도트 스테레오그램(RDS)을 만듭니다.

랜덤 도트 스테레오그램(RDS)




오리지널 업로드자는 독일어판 위키피디아의 LosHawlos씨 - de.wikipedia에서 커먼즈로 이동되었습니다. , CC 디스플레이-상속 3.0, htps : // 코몬 s. 으아아아아. rg / w / 어서 x. php? 쿠리 d=1966500

당신에게 보일까요?
눈의 초점을 앞뒤로 옮기면 그림이나 문자가 떠오르는 (입체로 보이는) 녀석입니다.
스마트폰에서 보는 사람은 죄송합니다. PC에서 봐.

이것을 자작해보고 싶다.

아래의 사이트에 Python에서의 구현예가 있었으므로, 참고로 하여 오리지널의 랜덤 닷 스테레오그램을 만들어 보았다.
  • Making Your Own Autostereograms using 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')
    


    아까의 원표보다 조금 멍하니 있지만, 보인다.

    엔지니어 여러분에게 퀴즈



    얼마나 쓰여 있을까요? ? 텍스트입니다.


    대답은 코멘트란에서 기다리고 있습니다^^

    추가



    속편을 썼습니다.
  • 최고의 무작위 점 스테레오 그램 (RDS)를 찾습니다.

  • 한층 더 속편을 썼습니다.
  • 기계 학습을 통한 깊이 추정으로 2D 사진에서 원래의 랜덤 도트 스테레오 그램 (RDS) 만들기
  • 좋은 웹페이지 즐겨찾기