function [u,x] = segment_ls(n,pn,mu)

% das Gitter
    h  = 2/n;                                      % Zellenbreite
    x  = -1.0 + 0.5*h + h*(0:(n-1))';              % Zellzentren

% verrauschte Funktion
    k  = fix(n/2);
    v0 = [zeros(k,1);ones(n-k,1)];                 % Treppenfunktion

%   v0 = sin(10*x);                                % mehrere Treppen
%   v0 = double(v0 > 0) - double(v0 <= 0);

    randn('seed',0);                               % init randn
    v  = v0 + pn*randn(n,1);                       % verrauschte Funktion

% Begin mit einfacher Level-Set Funktion
    p  = -1 + 2*abs(x);

% Evolution der Level-Sets
    itmax = 100;                                   % max Iterationen
    dt    = 1.0e1;                                 % Zeitschrittbreite
    for it=1:itmax
        In = find(p < 0);                          % innere Menge
        Au = find(p >= 0);                         % aeussere Menge

        c1 = sum(v(In))/length(v(In));             % innerer Wert
        c2 = sum(v(Au))/length(v(Au));             % aeusserer Wert

        dp = p;
        dp = [2*dp(1)-dp(2);dp;2*dp(n)-dp(n-1)];
        dp = (dp(3:(n+2))-dp(1:n))/(2*h);
        dp = dp./abs(dp + (dp == 0));
        dp = [2*dp(1)-dp(2);dp;2*dp(n)-dp(n-1)];
        dp = (dp(3:(n+2))-dp(1:n))/(2*h);          % (p'/|p'|)'

        p  = p + dt*(dp + mu*(c1-v).^2 - mu*(c2-v).^2);
                                                   % aktuelle LS Funktion

        u1 = zeros(n,1);
        u1(In) = 1;                                % u1=1 in innerer Menge
        u2 = zeros(n,1);
        u2(Au) = 1;                                % u2=1 in aeusserer Menge
        u  = c1*u1 + c2*u2;                        % segmentierte Funktion
        plot(x,v0,'b',x,v,'r',x,u,'g');            % grafisch darstellen
        drawnow;

        it = it+1;
    end

% zeige exakt, verrauscht und entrauscht zusammen
    plot(x,v0,'b',x,v,'r',x,u,'g');                % grafisch darstellen
