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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
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
1 2 3 4 5 6 7 8 9 10 11 |
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