Fuzzy Filter implementation in verilog.

M

Mauro Larrat

Guest
Hi,

I am intending to create a fuzzy filter to process noise in a video streaming.

I am adopting 8bit per pixel, grayscale 800 x 600 image format for each frame, at 30 fps.

The filter is a 3x3 window.

How can I implement a memory which could store the membership functions? How can I represent the input and the output in a systesizable way?

thanks,
 
In article <4747d75f-1295-4aa7-bc92-bd6075c1754e@googlegroups.com>,
Mauro Larrat <maurolarrat@gmail.com> wrote:
Hi,

I am intending to create a fuzzy filter to process noise in a
video streaming.

I am adopting 8bit per pixel, grayscale 800 x 600 image format
for each frame, at 30 fps.

The filter is a 3x3 window.

How can I implement a memory which could store the membership
functions? How can I represent the input and the output in a
systesizable way?

Start with defining where your input is coming from, and where
your output is going to.

These often heavily influence how you're going to design
the implementation of your algorithm.

Regards,

Mark
 
Mark Curry wrote:
In article <4747d75f-1295-4aa7-bc92-bd6075c1754e@googlegroups.com>,
Mauro Larrat <maurolarrat@gmail.com> wrote:
Hi,

I am intending to create a fuzzy filter to process noise in a
video streaming.

I am adopting 8bit per pixel, grayscale 800 x 600 image format
for each frame, at 30 fps.

The filter is a 3x3 window.

How can I implement a memory which could store the membership
functions? How can I represent the input and the output in a
systesizable way?

Start with defining where your input is coming from, and where
your output is going to.

These often heavily influence how you're going to design
the implementation of your algorithm.

Regards,

Mark
For a N x N filter, you need at least N - 1 rows of pixel storage
assuming you are working with the current incoming pixels in real
time. The simplest approach, especially for small N like 3 x 3,
is to use one dual-port line buffer memory for each of the previous
two lines. During the processing you are constantly reading data
from the previous two lines while writing the current one. To
get away with just two line buffers, they need to be able to read
first, then write (in a single pixel time). If you can't do this
you might need to use 3 buffers, so at any one time two are reading
and one is writing (no need for dual-port).

In addition, you need a smaller amount of (register) storage for
the most recent two or three pixels from each line. This is how
you get the 3 x 3 set of pixels into your filter in parallel.

Finally you need to think about edge effects. To start with
800 x 600 and end with 800 by 600 you'd need to decide how to
handle the pixels in the top and bottom rows and left and right
columns of the image. One common method is to consider that the
edge of the frame acts like a mirror, and you fill the 3 x 3
filter elements that would have come from outside the frame with
a mirror image of the pixels inside the frame. And since the processing
has some latency (one line for the 3 x 3 case with mirrored edges)
you need to generate timing for the final output line which comes
after the last line in the frame (if the input video does not
provide a line enable signal between frames).

--
Gabor
 

Welcome to EDABoard.com

Sponsor

Back
Top