본문 바로가기

Graphics Note

random phase noise

텍스쳐 합성에 random phase noise라는게 나와 구현해봄.


function rpn = genRPN( img )

% Generate Random Phase Noise associated with a given square-sized image 'img'

    [sz, ~, chsz] = size(img);

    hsz = floor(sz/2+1);

    

    h_theta = unifrnd(-pi, pi, [sz, hsz]);

    h_theta(1,1) = 0;

    h_theta(hsz,1) = randsample([0, pi], 1);

    h_theta(1,hsz) = randsample([0, pi], 1);

    h_theta(hsz,hsz) = randsample([0, pi], 1);


    theta = [h_theta(:,1:end-1), rot90(h_theta,2)];

    

    rpn = zeros(sz, sz, chsz);

    fft_img = fft2(img);

    e = exp(theta * 1i);

    for ch=1:chsz

        rpn(:,:,ch) = real(ifft2(fft_img(:,:,ch).*e));

    end

end


이미지의 위상을 균일 난수만큼 이동시켜서, 비슷하지만 서로 다른 텍스쳐를 생성할 수 있는데, 가우시안 텍스쳐가 아니면 썩 좋지 못한 결과를 보인다. 왼쪽 위가 원본 텍스쳐고, 나머지 세 개가 위 코드로 생성한 텍스쳐이다.


 


  

참조한 논문들

Bruno Galerne, Yann Gousseau, and Jean-Michel Morel, "Random Phase Textures: Theory and Synthesis, IEEE Transactions on Image Processing, voㅣ. 20, no. 1, pp. 257-267 2011


J.-P. Lewis, "Texture Synthesis for Digital Painting", in Proc. SIGGRAPH, New York, 1984, pp. 245-252.

'Graphics Note' 카테고리의 다른 글

OpenGL 강좌 - 1. 소개와 준비  (24) 2015.05.23
asymptotic discrete spot noise (ADSN)  (0) 2014.12.11
implementing EPA in 3D  (0) 2014.05.29
implementing GJK in 3D  (0) 2014.05.24
enabled, but unused vertex attribute array  (0) 2014.05.11