from
Oil Paint Effect
by Ahmed Hassan
This m file performs an Oil Paint effect on an input image.
|
| oil_paint.m |
clc;
clear all;
in_img = imread('sofa.JPG');
in_img = rgb2gray(in_img);
size_in_img_x = size(in_img);
size_in_img = size(in_img);
n = input('Please Enter The Amount of Oil Painting Effect You Desire: ');
mask = ones(n,n);
% find centre_pixel of mask. this is for masks of odd sizes only.
size_mask = size(mask);
centre_index = [ceil((size_mask(1))/2) ceil((size_mask(2))/2)];
% padding image with enough rows and coulumns so that mask can be applied on the first pixel without raising exceptions.
pad_u = uint8([]);
for x = centre_index(1)-1:-1:1
size_pad_u = size(pad_u);
pad_u(size_pad_u(1)+1,:) = in_img(1,:);
end
pad_d = uint8([]);
for x = centre_index(1)+1:size_mask(2)
size_pad_d = size(pad_d);
pad_d(size_pad_d(1)+1,:) = in_img(size_in_img(1),:);
end
in_img = vertcat(pad_u,in_img,pad_d);
size_in_img = size(in_img);
pad_l = uint8([]);
for x = centre_index(2)-1:-1:1
size_pad_l = size(pad_l);
pad_l(:,size_pad_l(2)+1) = in_img(:,1);
end
pad_r = uint8([]);
for x = centre_index(2)+1:size_mask(2)
size_pad_r = size(pad_r);
pad_r(:,size_pad_r(2)+1) = in_img(:,size_in_img(2));
end
in_img = horzcat(pad_l,in_img,pad_r);
tic
%main oil painting computation
out_img = uint8(zeros(size_in_img_x(1),size_in_img_x(2)));
win = uint8([]);
index = uint8([]);
for i = 1:size_in_img_x(1)
if (i>=centre_index(1))
limit_u = i - floor(size_mask(1)/2);
else
limit_u = 1;
end
limit_d = i + floor(size_mask(1)/2);
for j = 1:size_in_img_x(2)
value = uint8(zeros(1,256));
if (j>=centre_index(2))
limit_l = j - floor(size_mask(2)/2);
else
limit_l = 1;
end
limit_r = j + floor(size_mask(2)/2);
for x = limit_u:limit_d
for y = limit_l:limit_r
value(in_img(x,y)+1) = value(in_img(x,y)+1)+1;
end
end
[win,index] = max(value);
out_img(i,j) = index-1;
end
end
toc
figure
imshow(in_img);
figure
imshow(out_img, [1 255]);
|
|
Contact us at files@mathworks.com