MATLAB – étendre les bords d’une image (en mirroir ou autre)
Introduction
Dans le but de présenter des algorithmes MATLAB très prochainement, j’introduis ici la fonction qui permet d’étendre les bords d’une image. Une telle fonction sera très utile par la suite notamment pour effectuer des analyses avec des fenêtres glissantes.
option 1 : étends l’image avec des zéros
option 2 : étends l’image avec elle même en mode miroir
imagemirrored.m
function [ ret ] = imagemirrored(mat , MyDec_1, MyDec_2, option, GG)
% Check number of inputs.
if nargin > 5
error('myfuns:somefun2:TooManyInputs', ...
'requires at most 3 optional inputs');
end
% Fill in unset optional values.
switch nargin
case 4
GG = @magic;
end
[N,M,O] = size(mat);
% On complète avec des zéros
if option == 1
for k=1:O
N_c = N + 2*MyDec_1;
M_c = M + 2*MyDec_2;
mat_c = ones( N_c, M_c, 'uint8') * 255;
%mat_c( (MyDec_1 - 1)/2 : N + (MyDec_1 - 1)/2 - 1,(MyDec_2 - 1)/2 : M + (MyDec_2 - 1)/2 - 1 )= mat;
mat_c(MyDec_1+1: N+MyDec_1, MyDec_2+1: M+MyDec_2) = mat(:,:,k);
mat_dim_c(:,:,k) = mat_c;
end
ret = mat_dim_c;
end
% On complète avec les images mirroirs
if option == 2
for k=1:O
N_c = N + 2*MyDec_1;
M_c = M + 2*MyDec_2;
mat_c = zeros([N_c, M_c], 'uint8');
mat_c(MyDec_1+1: N+MyDec_1, MyDec_2+1: M+MyDec_2) = mat(:,:,k);
mat_c(1: MyDec_1, :) = mat_c(2*MyDec_1: -1: MyDec_1+1, :); %miroir haut
mat_c(N + MyDec_1 + 1 : N + 2*MyDec_1, :) = mat_c( N + MyDec_1: -1: N + 1, :); %miroir bas
mat_c(: , 1: MyDec_2) = mat_c(:, 2*MyDec_2: -1 :MyDec_2+1); %miroir gauche
mat_c(: , M + MyDec_2 + 1 : M + 2*MyDec_2) = mat_c(: , M + MyDec_2: -1: M+1); %miroir droite
mat_dim_c(:,:,k) = mat_c;
end
ret = mat_dim_c;
end
example.m
II = imread('matlab_woman.jpg');
size_II = size(II);
windows_1 = nearest(size_II(1)/2);
windows_2 = nearest(size_II(1)/2);
II_zeros = imagemirrored(II, windows_1, windows_2, 1);
subplot(1,2,1), imshow(II_zeros), axis on;
II_mirror = imagemirrored(II, windows_1, windows_2, 2);
subplot(1,2,2), imshow(II_mirror), axis on;
Résultat
option 1 / option 2

0 commentaire