Matlab - Filter

From XennisWiki
Jump to: navigation, search

Matlab filter examples.

Example

Main script

main.m

%{
Dieses Script wendet auf das Bild I die beiden gegeben Filter an und
verwendet dabei verschieden große Fenster.
%}
load('I.mat') % In dieser Datei ist Bild I enthalten

windowSize = [3 5 7 49];

figure(1)       

for i=1:length(windowSize)
    % Medianfilter
    I_median = medianFilter(I, windowSize(i));
    subplot(2,length(windowSize), i);
        imshow(I_median)
        title( ['Median ', int2str(windowSize(i)), 'x', int2str(windowSize(i))] )
    % Mittelwertfilter
    I_mittelwert = mittelwertFilter(I, windowSize(i));
    subplot(2,length(windowSize),1*length(windowSize)+ i);
        imshow(I_mittelwert)
        title( ['Mittelwert ', int2str(windowSize(i)), 'x', int2str(windowSize(i))] )
end

Moving average filter

mittelwertFilter.m

function [ J ] = mittelwertFilter( I, n )
%MITTELWERTFILTER Mittelwertfilter
%   Wendet auf die Matrix I ein Mittelwert Filter mit der Fenstergröße n*n
%   an. An den Rändern wird dabei Zeropadding verwendet.
    if nargin < 2 error('Less arguments'); end
    
    m = floor(n/2);
    [row col] = size(I);
    J = zeros(row, col);
    
    % zeropadding (Anfügen von Nullen)
    M = zeros(row+2*m, col+2*m);
    M(m+1:end-m,m+1:end-m)=I;

    % iterate row
    for i=m+1:row-m
        % iterate column
        for j=m+1:col-m
            window = M(i-m:i+m, j-m:j+m);
            J(i,j) = sum(sum(window)) / (n*n);
        end
    end
    
    J = uint8(J);
end

Median filter

medianFilter.m

function [ J ] = medianFilter( I, n )
%MEDIANFILTER Medianfilter
%   Wendet auf die Matrix I ein Median Filter mit der Fenstergröße n*n an.
%   An den Rändern wird dabei Zeropadding verwendet.
    if nargin < 2 error('Less arguments'); end
    
    m = floor(n/2);
    [row col] = size(I);
    J = zeros(row, col);
    
    % zeropadding (Anfügen von Nullen)
    M = zeros(row+2*m, col+2*m);
    M(m+1:end-m,m+1:end-m)=I;

    % iterate row
    for i=m+1:row-m
        % iterate column
        for j=m+1:col-m
            window = M(i-m:i+m, j-m:j+m);
            J(i,j) = median(window(:));
        end
    end
    
    J = uint8(J);
end

See also