CS376A Digital Image Processing Skidmore College Assignment 01 Due Monday 02/13/2023 via email. Attach a zip file (please do not create a rar file) with all the code and images. Note: if your original input images were named originalName.jpg and saltpepperOriginal.jpg then your output images should be ... 4 images from part 1 below (named in this format: blurred7x7V4-originalName.jpg if the gaussian mask was a 7x7 with variance 4.) 2 images from part 2 below (for both horizontal and vertical sobel edges) named: sobelHorizontal-originalName.jpg and sobelVertical-originalName.jpg 1 image resulting from part 3 below (the median filtering) named: median-saltpepperOriginal.jpg any original images used for the resulting images above. ------------------------------------------------ Get these three files that work together all posted on class notes page: CrossCorr.java from 02/01/2023 RGBImage.java from 01/25/2023 and RGBPixel from 01/25/2023 also get GenerateGaussianMask.java from 02/01/2023 to use on its own. ------------------------------------------------ 0. Edit the code in the constructor of RGBPixel to a. assign 0 to a color channel if the value passed in is < 0. b. assign 255 to a color channel if the value passed in is > 255. c. if >=0 and <= 255, assign it to the color channel The code as posted will assign 0 to a color channel if the value passed in is > 255 and that is what I am asking you to fix. 1. Get a feel for how Gaussians of different variances affect blurring an image. Utilize GenerateGaussianMask program: Note: 1st parameter of GenerateGaussianMask is mask width and height 2nd parameter is the variance of the Gaussian e.g. calling like: java GenerateGaussianMask 13 4 will output a 13x13 gaussian mask with variance 4 bring the masks you create into CrossCorr and blur an image with them. edit the main in CrossCorr to generate at least 4 different blurred images using different variance gaussians of the same square size. The 4 images you generate should be visually differently blurred to your eye to get a bit of the sense of blurring the same image with different variances. 2. Edit the crossCorrelate method to take in two more parameters. The meaning of one of the parameters is a flag to signify between the following: 0 for a mask that is a blurring mask that already has the mask elements summing to 1. 1 for a mask that is a blurring mask that does not sum to 1, and so needs a divide by the total before outputting the new image pixel. 2 for a mask that is an edge mask Note: If you want to create an enum for that flag, please do. Otherwise an int is fine. When that parameter is a 2, the other new parameter signifies a threshold value (above this threshold means an edge, otherwise not an edge) Note: feel free to use optional parameter syntax for this one. Otherwise you can write it such that it is always required but only used when the other parameter actually has the value 2. Then in the method add code to check the flag if flag is 0, code works as is. if flag is 1, do a divide by the total of the mask before outputting new pixel if flag is 2, output only 0 or 255 depending on the comparison of the Math.abs(sum) to the threshold. Test the method to see if it works correctly with the sobel masks. Also, should test the method to see if blurring still works with and without doing the divide. 3. Write a new method to do median filtering. Have it take an image as a parameter that you may assume to be gray as well as another parameter that is the width and height of the neighborhood around each pixel of which you are computing the median. Find an image that has salt and pepper noise and run it through your method to see the result. 4. Write a method named convolve that takes the same parameters as crossCorrelate. Have your method alter the mask appropriately and just call crossCorrelate.