오일 이펙트 효과를 구현한거라는데;;
오일 이펙트 구현 부분에 소스인데;; 이게 도대체 이미지를 어떻게 바꾼단소린지 모르겠네요;;
머 위에랑 아래는 이미지불러보는거랑 변수설정이고 맨아래쪽이야 쇼이미지고 중간에 진하게 표시해놓은 오일효과를 정의한 소스코드부분.;;
원본 이미지를 어떻게 하겠단 소린지 모르겠네요;;
실행해보면 원본이미지가 기름부어놓은것 처럼 흐리멍텅해짐 수채화느낌 비스무리하게 나네요;;
clc
clear all
close all
% 영상 파일 경로명을 지정한다.
filename = 'my.jpg'; % 현재 디렉토릭을 의미한다.
% RGB 영상을 가져온다.
color_image = imread( filename );
% RGB to gray, 산술 연산을 하기 위해 unit8에서 double로 바꾼다.
gray_image = double( rgb2gray( color_image ) );
% 영상의 크기를 가져온다.
[height, width] = size( gray_image );
% 결과 영상에 대해 메모리 할당한다.
oil_effect_image = zeros( height, width );
% 변수 설정
heightLength = 5; widthLength = 5;
halfHeightLength = floor(heightLength/2);
halfWidthLength = floor(widthLength/2);
tic
for i=1:height
for j=1:width
hist = zeros(1, 256); % 1차원의 256개 방 만든다. C, Java와 달리 배열은 괄호로 한다.
var = gray_image(i,j);
n=1; hist(var+1) = 1; % C, Java와 달리 첨자(index)는 1부터 시작한다.
% oil effect 구현
for p=-halfHeightLength:heightLength-halfHeightLength-1
for q=-halfWidthLength:widthLength-halfWidthLength-1
tmpHeight = mod((i + p + height), height) + 1;
tmpWidth = mod((j + q + width), width) + 1;
tmpVar = gray_image(tmpHeight, tmpWidth);
if( p ~= 0 || q ~= 0 ) % C, Java의 != 에 대응한다.
hist(tmpVar+1) = hist(tmpVar+1) + 1; % C, java의 증감(++), 가감(--)이 없다.
end
if( hist(tmpVar) > 0 )
n = hist(tmpVar);
finalVar = tmpVar; % 최종값
end
end
end
% 최종값을 삽입한다.
oil_effect_image(i,j) = finalVar;
end
end
toc
% 파일로 저장한다.
imwrite( oil_effect_image, './lena_oil_effect.jpg' );
% 원 영상과 결과 영상을 영상에 보이기 위해 8 bit로 데이타형 변환한다.
gray_image = uint8( gray_image );
oil_effect_image = uint8( oil_effect_image );
% 결과 영상을 보인다.
figure(1);
subplot(1,2,1); imshow( gray_image ); title( 'orginal image' );
subplot(1,2,2); imshow( oil_effect_image); title( 'oil effect' );
매트랩 문법이 은근히 변태스럽네