MATLAB – étendre les bords d’une image (en mirroir ou autre)

Publié par David le

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

Catégories : Matlab

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *