Computer Science - The City College of New York
CSC 471 - Fall 2017  3D Computer Vision

Assignment 2. Feature Detection
( Due Oct 13 before midnight )

Note:  Turn in a PDF document (in writing; please type) containing a list  of your .m files (not the code itself),  images showing the results of your experiments, and an analysis of the results. All the writings must be soft copies in print and be sent to Prof. Zhu <> via email. For the programming part, send ONLY your source code  by email; please don't send in your images and executable (even if you use C++).  You are responsible for the lose of your submissions if you don't write  "CSc 471 Computer Vision Assignment 2" in the subject of your email. Do write your names and IDs (last four digits) in both both of your report and the code. Please don't zip your report with your code and other files; send me the report in a separate PDF file. The rest can be in a zipped file.

Choose one or two of the images on the course web page for this assignment or use an image of your own choice.  If you use a different image, be careful that the image has not been saved under JPEG using a high level of compression.  This often introduces artifacts into the image that confound subsequent analyses of the results.  For the most part, you should apply your operators to a gray-scale version of the image. 

1. (20 points) Generate the histogram of the image you are using, and then perform a number of histogram operations (such as contrast enhancement, thresholding and equalization) to make the image visually better for either viewing or processing (10 points).  If it is a color image,  please first turn it into an intensity image and then generate its histogram.  Try to display your histogram (5 points), and make some observations of the image based on its histogram (5 points). What are the general distributions of the intensity values? How many major peaks and valleys does your histogram have? How could you use the histogram to understand, analyze or segment the image? Please also display the histograms of the processed images and provide a few important observations.

2. (20 points) Apply the 1x2 operator and Sobel operator to your image and analyze the results of the gradient magnitude images (including vertical gradients, horizontal gradients, and the combined) (10 points). Please don't forget to normalize your gradient images, noting that the original vertical and horizontal gradients have both positive and negative values. I would recommend you to display the absolute values of the horizontal and vertical gradient images.  Does the Sobel operator have any clear visual advantages over the 1x2 operator? Any disadvantages (5 points)? If you subtract the 1x2 edge image from the Sobel are there any residuals? You might use two different types of images: one ideal man-made image, and one image of a real scene with more details (5 points). (Note: don't forget to normalize your results as shown in slide # 29 of  feature extraction lecture: part 2)

3. (20 points) Generate edge maps of the above two combined gradient maps (10 points).  An edge image should be a binary image with 1s as edge points and 0s as non-edge points. You may first generate a histogram of each gradient map,  and only keep certain percentage of pixels  (e.g.  5% of the pixels with the highest gradient  values) as edge pixels (edgels) . Use the percentage to automatically find a threshold for the gradient magnitudes. In your report, please write up the description and probably equations for finding the threshold, and discuss if 5% is a good value. If not what is (5 points) ? You may also consider to use local, adaptive thresholds to different portions of the image so that all major edges will be shown up nicely (5 points). In the end, please try to generate a sketch of an image, such as the ID image of Prof. Zhu.

4. (20 points) What happens when you increase the size of the edge detection kernel from 1x2 to 3x3 and then to 5x5 , or 7x7? Discuss computational cost (in terms of members of operations, and the real machine running times - 5 points), edge detection results (5 points) and sensitivity to noise, etc. (5 points). Note that your larger kernel should still be an edge detector. Please list your kernels as matrices in your report, and tell us what they are good for (5 points).

5.  (20 points) Suppose you apply the Sobel operator to each of the RGB color bands of a color image.  How might you combine these results into a color edge detector (5 points)?  Do the resulting edge differ from the gray scale results?  How and why (5 points)? You may compare the edge maps of the intensity image (of the color image), the gray-scale edge map that are the combination of the three edge maps from three color bands, or a real color edge map that edge points have colors (5 points). Please discuss their similarities and differences, and how each of them can be used for image enhancement or feature extraction (5 points). Note that you want to first generate gradient maps and then using thresholding to generate edge maps.  In the end, please try to generate a color sketch of an image, such as the ID image of Prof. Zhu. You may also consider local, adaptive thresholding in generating a color edge map.