\documentclass[12pt]{article}
\usepackage{html,fullpage,graphicx}

\pagestyle{empty}
\begin{document}
\begin{center}
{\bf \LARGE PROJECT 5} \\
\vspace{0.25in}
\underline {{\bf CS/BIO 6640 -- IMAGE PROCESSING}} \\
{\bf Fall Term 2011} \\
%\vspace{0.25in}
Assigned November 26 \\
Due December 13 (Before midnight) \\
\end{center}

\vspace{0.05in}
\begin{center}
{\Large \bf  Feature and Object Detection}
\end{center}
\vspace{0.25in}

\noindent
The goal of this project is to build a feature detection and
analysis system.  The system should take as input a greyscale image
and produce a set of {\em shape descriptions}.  It is strongly advised
that you build the software piece by piece and debug each module as
you go.  
\vspace{0.1in}

\section*{Preprocessing and Edge Detection}
\noindent
\underline{You will need to implement and demonstrate the operation of
  the following:}
\begin{itemize}
\item You should implement a zero crossing algorithm, that produces
single-pixel thick lines that divide images into positive and negative
regions.  
\item 
You should implement the Marr-Hildreth 
(zero crossings of Laplacian of the Gaussian)
or Canny edge detector
(zero crossings of second derivative in the gradient direction),
with a threshold on gradient magnitude.   Hysteresis thresholding is
nice to have, and good for extra credit on this section, but not required for this project.  
\item 
You will need a convolution based denoising (blurring or low-pass transform) algorithm to
prepare the image for differentiation  
\item 
You should find (e.g. on the web---document your sources) or implement median and bilateral 
filtering that is efficient on reasonable
sized neighborhoods (e.g. up to 9x9) and apply them, possibly iteratively.
You could, instead find (document sources) or implement Anisotropic Diffusion. 
Experiment with different numbers of iterations or neighborhood sizes or parameters.  Show results from these experiments.
\item 
You should implement this as an {\em edge-detection pipeline} and experiment with
parameters and demonstrate it on a set of synthetic and real images of
your own choosing.
\end{itemize}

\section*{Line Detection}
\begin{itemize}
\item 
Find some test images that have strong lines --- synthetic
images are OK, but make sure you show some results on real photographs.
We have included several 
\htmladdnormallink{images}{../images}  
for testing purposes.
Find two or three other images to demonstrate.  
\item 
You should use a Hough transform for the line detector.  
This transform is described on pages
733--738 in the book.
\item
Make sure you present the results visually.  The easiest way to do
this is to create a function that draws a set of colored pixels across the
image for each line it finds.    The easiest thing is to express the
parametric form of the line and march along at regular intervals and
make those pixels (round off) a specified color.  There are nicer ways
to draw lines from the graphics literature, but you don't need to do
that for this project.  
For {\bf extra credit}, you can implement
some intelligent clipping of these lines to conform to line segments in the data, but this is not necessary.
\end{itemize}

\noindent
\underline{Hints:}
\begin{itemize}
\item 
The edge detector should be in the form of a binary image. You then
should loop through that image and allow each pixel to contribute to
the accumulator space.
\item 
The hard part of this project is finding peaks in the accumulator
space.  Treat the accumulator space as another ``image''.
You should filter/smooth it.  Look for local maxima and then threshold, or
threshold (to find small blobs) and then find centers of these blobs
or iteratively ``whittle'' them down to a single pixel.
\item 
Debug your programs on some synthetic images, e.g. a white square on dark background.
\item 
Do the project in stages and present results at each stage.
\end{itemize}

\section*{Circle Detection---Analysis of Surface Mount IC Packaging}
The purpose of this part of the project is to build a system for
detecting circles (of prespecified radius---you don't need to determine the radius automatically) in images.
\begin{itemize}
\item 
Build a system that detects circles of a specified size (within some
tolerance).    This should be done by first doing edge detection and
then constructing the Hough transform, blurring it, and then looking
for maxima on this function.  Demonstrate results on synthetic images
of your own design.   
\item Tune and test your system to detect the two different sized
  solder beads and ``voids'' (light-color bubbles in the bead) 
  from the x-ray image of the surface-mount packaging.
  This is a quality control problem where chip manufacturers are
  trying to determine how well the contacts align for each mounted
  component.   You will need to hand-tune the radii by looking at images.  Demonstrate your results on these 
\htmladdnormallink{test images.}{../line_images}   
\end{itemize}
\underline{Hints:}
\begin{itemize}
\item 
If the Hough transform parameters are simply translation on the same
grid resolution as the image, as in this
case, the accumulator space values are simply a cross correlation with a
discrete version of the shape itself (i.e. match filtering).
Blurring can be done by bluring the filter or bluring after fact.  It
doesn't matter --- they can be done either way and either the Fourier
or spatial domains.  
\end{itemize}
\begin{figure}
\begin{center}
%\resizebox*{0.05\textwidth}{!}{\includegraphics{correlation_project_fig.png}}
\includegraphics[scale=0.5]{./setpoint_picts.png}
\end{center}
\label{fig:surfaceM}
\end{figure}
You can find images 
\htmladdnormallink{here.}{../images}.

\end{document}

