<< Chapter < Page | Chapter >> Page > |
Next we will set the
out_ptr
to point to the
upper right quadrant of the output image and call
conv3x3_image()
in
conv3x3_image.c
.
As with
pre_scale_image()
, the
_image
indicates this is only the wrapper
function for the ImageLIB component,
conv3x3()
.
As before, we must setup our input and output streams. Thistime, however, data will be read from the external memory,
into internal memory for processing, and then written to theoutput image. Iterating over each row, we compute one line of
data by calling the component function
conv3x3()
in
conv3x3.c
.
In
conv3x3()
, you will see that we perform a 3x3
block convolution, computing one line of data with the low
pass filter mask. Note here that the variables
IN1[i]
,
IN2[i]
, and
IN3[i]
all grab only one pixel at a time. This
is in contrast to the operation of
pre_scale()
where the variable in_ptr[i] grabbed 4 pixels at a time. Thisis because
in_ptr
was of type unsigned int, which
implies that it points to four bytes of data at a time.
IN1
,
IN2
, and
IN3
are
all of type unsigned char, which implies they point to asingle byte of data. In block convolution, we are computing
the value of one pixel by placing weights on a 3x3 block ofpixels in the input image and computing the sum. What happens
when we are trying to compute the rightmost pixel in a row?The computation is now bogus. That is why the wrapper
function copies the last good column of data into the tworightmost columns. You should also note that the component
function ensures output pixels will lie between 0 and 255.
Back in
img_proc.c
, we can begin the edge
detection algorithm,
sobel_image()
, for the lower
left quadrant of the output image. This wrapper function,located in
sobel_image.c
, performs edge detection
by utilizing the assembly written component function
sobel()
in
sobel.asm
. The wrapper
function is very similar to the others you have seen andshould be straightforward to understand. Understanding the
assembly file is considerably more difficult since you are notfamiliar with the assembly language for the c6711 DSP. As
you'll see in the assembly file, the comments are very helpfulsince an "equivalent" C program is given there.
The Sobel algorithm convolves two masks with a 3x3 block of data and sums the results to produce a single pixel of output.This algorithm approximates a 3x3 nonlinear edge enhancement operator. The brightest edges in the result represent a rapidtransition (well-defined features), and darker edges represent smoother transitions (blurred or blended features).
This section provides a hands-on introduction to the IDK environment that will prepare you for the lab exercise.First, connect the power supply to the IDK module. Two green lights on the IDK board should be illuminated when the poweris connected properly.
You will need to create a directory
img_proc
for
this project in your home directory. Enter this newdirectory, and then copy the following files as follows
(again, be sure you're in the directory
img_proc
when you do this):
Notification Switch
Would you like to follow the 'Digital signal processing laboratory (ece 420)' conversation and receive update notifications?