4. 볼록 렌즈 효과 알고리즘

4. 볼록 렌즈 효과 알고리즘
      볼록 렌즈 효과 란 볼록 렌즈 를 통 해 얻 은 시각 적 효과 에 해당 한다.
    내 가 보기에 볼록 렌즈 효과 의 본질은 일종 의 삽입 값 알고리즘 인 렌즈 중심의 물 체 는 일정한 확 대 를 얻 고 상응하는 가장자리 가 압축 되 며 가장자리 가 연속 되 어야 이미지 가 조 화 롭 고 자 연 스 럽 게 보일 수 있다.
    그 알고리즘 은 다음 그림 과 같다.
 본인 의 표 현 력 에 한계 가 있 기 때문에 여러분 께 곤 혹 스 러 운 점 을 드 리 면 양해 와 교 류 를 부탁드립니다.
    알고리즘 이 제 시 된 이상 지금 필요 한 것 은 맵 함 수 를 찾 는 것 입 니 다. 상기 알고리즘 과 관련 된 점 의 맵 을 실현 할 수 있 습 니 다. 다행히도 많은 함수 들 이 돌출 함수 라면 상기 기능 을 실현 할 수 있 습 니 다. 원 의 반지름 이 r 라 고 가정 합 니 다.해당 맵 함 수 는 다음 과 같 습 니 다.
    여기 서 저 는 y = x ^ 2 / r 를 사용 하 겠 습 니 다. 물론 맵 좌 표를 구 할 때 역방향 사 고 를 사용 해 야 합 니 다. 역방향 사고 란 주어진 처리 후의 점 에 대해 원래 이미지 의 위 치 를 찾 은 다음 에 원래 이미지 의 이 점 의 값 을 처리 한 후에 이미지 가 상대 적 인 점 에 부여 하 는 것 입 니 다 (자세히 알 아 보 세 요)!해당 matlab 코드 는 다음 과 같 습 니 다.
  
 
img=imgread('1.jpg');
info_size=size(img);
height=info_size(1);
width=info_size(2);
spec_img=zeros(height,width,3);
imshow(img);
figure();
%%%%%%%%%%%%%%x(i,j)
cen_x=width/2;
cen_y=height/2;
radius=150;%%%%%you can change it!!!!!!R!!!!!
radius=min(cen_x,cen_y);
for i=1:height
    for j=1:width
        
        distance=(j-cen_x)*(j-cen_x)+(i-cen_y)*(i-cen_y);
	%%%%% r^2=(j-cen_x)*(j-cen_x)+(i-cen_y)*(i-cen_y)!!!!!
	dis=distance^0.5;       
        spec_img(i,j,:)=img(i,j,:);       
        if(distance<=radius^2)                      
           new_j=floor( dis*(j-cen_x)/radius+cen_x);       
           new_i=floor(  dis*(i-cen_y)/radius+cen_y);       
           spec_img(i,j,:)=img(new_i,new_j,:);       
        end                    
    end
end 
imshow(spec_img/255);

 
처리 후:
하하, 오목 렌즈 의 효 과 는??????????????여러분 에 비하 면 금방 느낌 이 오 겠 죠!!!    물결 등등 의 효 과 는????????????????????하하!!!!!
친구 들 의 지 도 를 환영 합 니 다. 공유 하고 출처 를 밝 히 는 것 을 환영 합 니 다.
http://blog.csdn.net/wsfdl

좋은 웹페이지 즐겨찾기