Clayton Anderson

CSE 163: Assignment 1 - Image and Signal Processing 4/28/17


3.1 General: Writeup and Program Behavior

A few comments on my code and assignment in general.

I wrote a couple different versions of the convolution method for use in the filters methods (Blur, Sharpen, EdgeDetect). They all pretty much do the same thing except one writes to an output array (as opposed to the current image), one takes an input array (as opposed to the current image), and a few other similar differences.

I based my convolution filters and sampling methods off lambda functions (kind of important note -- I modified the Makefile to use -std=c++11) since floating point functions come more naturally to me than digital ones. This made all the convolution methods very similar, and going to the re-scale / shift was essentially the same because I'd already implemented some other floating point formulas (i.e. gaussian blur).

In the quantization / dithering sections I renormalized the weights on the edges, while for all other convolution methods I applied toroidal boundary conditions (including in shift, which seems somewhat controversial according to piazza).

I had a bit of trouble understanding what the original filter width of the Mitchell and Hat filters was supposed to be, however I finally understood we were to integrate over [-2,2] for Mitchell and [-1,1] for the Hat filter. This is represented in my code as "radius = 2" in the convolution methods.

I'm a little concerned about my shift on the checkerboard as all three sampling methods look essentially the same and I wasn't able to get the solution .exe to work to check the proper output. Speaking of which, the solution .exe throws the BMP file error even when I use the given files (I coded this up on mac but tried the .exe on windows 7).

Lastly, as a gift to the graders, I did not implement a fun nonlinear filter. Enjoy grading!

Executable

3.2 Basic Operations


Brightness Section


Contrast Section


Saturation Section


Gamma Section


Crop Section

3.3 Quantization and Dithering


Quantize Section


Random Dither Section


Floyd-Steinberg Dither Section

3.4 Basic Convolution and Edge Detection


Blur Section


Sharpen Section


Edge Detection Section

3.5 Antialiased Scale and Shift


Point Sampling Scale Section


Hat Sampling Scale Section


Mitchell Sampling Scale Section


Point Sampling Shift Section


Hat Filter Shift Section


Mitchell Filter Shift Section

3.6 Fun nonlinear filters