help-octave
[Top][All Lists]

## Re: Smoothing Functions without distorting matrices' edges

 From: Søren Hauberg Subject: Re: Smoothing Functions without distorting matrices' edges Date: Sun, 24 Sep 2006 19:06:08 +0200

```Robert,
There was a bug in the program I sent you (I just programmed in from
the top of my head). You need to change
to

But, looking at your example, the mentioned program doesn't solve your
problem. However, the Perona-Malik seems to solve your problem. Just
http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/Spatial/anisodiff.m
(it's from the link I sent you earlier), and type the following:

x=randn(300,101)+ones(300,1)*(-50:1:50)/12;
y=anisodiff(x, 100, 50, 0.2, 1);

There are problems along the border of the image (matrix, if you like),
but the edges looks fairly good to me.

Søren

søn, 24 09 2006 kl. 09:32 -0700, skrev Robert A. Macy:
> Soren,
>
> Thank you for the program and the URL.  I'll examine the
> program's principles - it didn't work, generated error
> messages regarding matching sizes...
>
> here's a profile and a tilted matrix
> try this and see:
> >> prof=(1-cos(2*pi()*( (1:51)-1)/50))';
> >> prof=prof-min(prof);
> >> prof=prof/sum(prof);
> >> x=randn((300,101)+ones(300,1)*(-50:1:50)/12;
> >> y=conv2(x,prof,'same');
> >> gsplot y;
>
> you can see how the edges have been destroyed.
>
> regarding smoothing:
> 1) gradients inside the matrix - very expected.  The noise
> is pretty gaussian and larger than the mean, magnitudes may
> be more than three times.  Picture sample is v1, but I have
>
> 2) yes, the edges get destroyed. The matrix has a complex
> curve along each row, but luckily each adjacent row is very
> similar, much like the tilted matrix above.
>
> I've got some "work arounds" and they are vectorized so
> fast.  but I probably reinvented the wheel here.  So
> looking for "accepted" ways to smooth a matrix without
> distorting the edges.
>
>          - Robert -
>
> On Sun, 24 Sep 2006 10:38:42 +0200
> > Hi,
> >   When you say "without severely distorting the edges" do
> > you mean:
> > 1) The border of the matrix, or
> > 2) points with high gradients?
> >
> > In the case of 1) you can use normalised convolution
> > convolution. I'm attaching a simple function for this.
> > In the case of 2) you should probably use some non-linear
> > diffusion. A
> > lot of people use the Perona-Malik algorithm, but in
> > general I think the
> > algorithms of Joachim Weickert work better. You can find
> > an
> > implementation of the Perona-Malik algorithm at
> > http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/
> >
> > Hope that helps just a little bit
> >
> > Søren
> >

```