From 9fef8c7300ecf97d2b700c19ea46257bbf709324 Mon Sep 17 00:00:00 2001 From: asack20 Date: Fri, 12 May 2017 16:43:36 -0400 Subject: [PATCH] Initial Upload --- README.txt | 152 +++++++++++++++++++ imageDistort.fig | Bin 0 -> 42093 bytes imageDistort.m | 372 +++++++++++++++++++++++++++++++++++++++++++++++ main.m | 14 ++ 4 files changed, 538 insertions(+) create mode 100644 README.txt create mode 100644 imageDistort.fig create mode 100644 imageDistort.m create mode 100644 main.m diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..3e078e1 --- /dev/null +++ b/README.txt @@ -0,0 +1,152 @@ + +Topic: Image Correction Project +Author: Andrew Sack +Date: 5/12/17 + +OVERVIEW + +A common issue when collecting and using data is data loss or corruption. This project focuses on the issue of corruption in image data, specifically in the form of pixel-by-pixel random noise It aims to approximate the non-corrupted image using just the corrupted image. Using statistical analysis of the images and variations on median filtering, this program can identify and mitigate or remove the corrupted pixels. + +WHERE TO START + +To use the program run the main.m file. This will launch the gui. + +USER INTERFACE/INSTRUCTIONS +1) Click 'Select Image' in the 'Load Image' box. A file browser will open and you can select a JPG image from the 'Data' folder. The image should appear under 'Image Preview'. + +2) (OPTIONAL) In the 'Image Distortion' box enter a distortion percent value in the text box or use the slider below if you wish to distort the image. Press the button labelled 'Distort'. The distorted image will replace the previous image under 'Image Preview'. See the description for 'distortImg.m' under CALCULATION FUNCTIONS for more information + +3) (OPTIONAL) Modify the values in the 'Image Correction Parameters' box. Press the 'Update Parameters' button to save the updates values. + + threshold: (DEFAULT: 0.10) used only for 'Selective Correction'. Is the decimal value between 0 and 1 of the minimum median difference a pixel must be from its surrounding pixels for filtering to occur. See THRESHOLD ANALYSIS for a more detailed explanation. + + M: (DEFAULT: 3) x/row size dimension of box surrounding a pixel that is included in the median filtering. See FILTERING METHOD for more details. Ex: M=3,N=3 is a 3x3 box with the target pixel in the center, a 1 pixel border around it + + N: (DEFAULT: 3) y/column sized dimension of box surrounding a pixel that is included in the median filtering. See FILTERING METHOD for more details. Ex: M=3,N=3 is a 3x3 box with the target pixel in the center, a 1 pixel border around it + + # iterations: (DEFAULT: 1) The number of times the correction is run. + +4) In the 'Image Correction' box click either the 'Selective Correction' or 'Non-Selective Correction' button to run image correction. See FILTERING METHOD for more details of the process. A loading bar will pop up and then when the correction is complete, the corrected image will replace the previous image under 'Image Preview'. + +5) In the 'Save Options' box, press a button to save results. A dialog box will pop up to enter a filename for the output file. + + 'Save Current Figure': saves the image currently displayed under 'Image Preview' as a MATLAB figure file + + 'Save as JPG': saves the image currently displayed under 'Image Preview' as a JPG + + 'Save Combined Figure': saves a MATLAB figure of original, distorted (if applicable), and corrected image side-by-side + + 'Generate Text Summary': saves a txt file with information about the correction performed + + +DATA +The data is contained in a folder named 'Data'. It contains several images that you can use or you can add any JPG image to the folder and use that. The images that come in the folder include: + +solid color/geometric images: useful for calibrating the code + +uncorrupted photographs: these can be distorted in the program which allows a clear comparison of the corrected image with the original + +pre-corrupted photographs: these images were found already in a distorted form and show that the program can work with corruption from other sources. Included images of this type have names that end in '_noisy' + +If using own images, it is recommended that the image is under approximately 500x500 pixels, as the processing time increases drastically with increasing image size. + + +RESULTS +All result files saved by the program are saved in a folder named 'Results'. The program generated 4 types of result files: + +1) JPG of corrected image +2) MATLAB figure of corrected image +3) MATLAB figure of original, distorted (if applicable), and corrected image side-by-side +4) Text file with data about correction + +Inside the 'Results' folder is a series of folders of sets of results designed to show the effects of specific parts of the correction algorithm. They are: + +'ChangeMandN' - show in an exagerated manner what the M and N parameters do + +'CompareDistortAmounts' - shows efficacy of correction on distort amounts ranging from 20% to 100% + +'CompareThresholds' - shows how increasing threshold values result in a decreasing amount of noise removed + +'PreCorruptedImages' - shows efficacy of filtering on images that were found pre-distorted from other sources + +'SelectiveVsNonSelective' - shows how selective filtering preserves sharpness in areas of the image (look at grass) + + +MAIN FILES + +1) main.m - script that launches gui and manages path and workspace (RUN THIS) + +2) imageDistort.m - code file for GUI + +3) imageDistort.fig - figure file for GUI + + +CALCULATION FUNCTIONS + +1) distortImg.m - This function will distort an image to the desired amount by randomly select the desired number of pixels and then replace their values with random color values across all channels. See function file for IO details. + +Note: The function inputs a percent of pixels in the image to be distorted. This is not equal to the number of pixels that end up distorted due to the random selection of target locations and the possibility of repeats. The number of unique distorted pixels was measured for several runs of multiple images and the corresponding real percentages were determined to be very consistently as follows: +0% = 0% (This is always exactly true) +10% = 9.5% +20% = 18% +30% = 25% +40% = 32% +50% = 39% +60% = 45% +70% = 50% +80% = 54% +90% = 59% +100% = 63% +As the input percentage gets infinitely large, the true percentage will approach a horizontal asymptote at 100% + +2) combinedSmooth.m - performs 2D median filtering as described in FILTERING METHOD. This form of filtering is selective, it is performed only on points where the median of the differences of surrounding pixels to the target pixel are greater than a threshold. This helps preserve the image quality, especially sharpness in areas that are not distorted. It first converts the uint8 image into double form for use in calculations and then converts the corrected image back to uint8. This function also incorporates a timer and waitbar due to the long processing time. See function file for IO details. + +3) smoothAll.m - performs 2D median filtering as described in FILTERING METHOD. This form of filtering is non-selective, it is performed on all points and all pixels are modified for the corrected image. It first converts the uint8 image into double form for use in calculations and then converts the corrected image back to uint8. This function also incorporates a timer and waitbar due to the long processing time. See function file for IO details. + + +GUI FUNCTIONS + +1) selectImg_SubFunc.m - triggers when 'Select Image' button is pressed. Handles process of selecting and loading in an image + +2) distortGo_SubFunc.m - triggers when 'Distort' button is pressed. Calls 'distortImg.m' to distort. the input image. + +3) updateParam_SubFunc.m - triggers when 'Update Parameters' button is pressed. Reads in parameter values + +4) selectCorr_SubFunc.m - triggers when 'Selective Correction' button is pressed. Calls 'combinedSmooth.m' to run selective correction on image + +5) genCorr_SubFunc.m - triggers when 'Non-Selective Correction' button is pressed. Calls 'smoothAll.m' to run non-selective correction on image + +6) saveCurr_SubFunc.m - triggers when 'Save Current Correction' button is pressed. See USER INTERFACE/INSTRUCTIONS #5 + +7) saveJPG_SubFunc.m - triggers when 'Save as JPG' button is pressed. See USER INTERFACE/INSTRUCTIONS #5 + +8) saveCombo_SubFunc.m - triggers when 'Save Combined Figure' button is pressed. See USER INTERFACE/INSTRUCTIONS #5 + +9) genTxt_SubFunc.m - triggers when 'Generate Text Summary' button is pressed. See USER INTERFACE/INSTRUCTIONS #5 + + +FILTERING METHOD +A modified method of 2D median filtering. The center point is not included in the median calculation and median is used instead of mean, because the use is to remove outliers, so calculations that are heavily skewed by outliers are a poor choice. The function steps through each point on each channel in the image (all calculations keep the image channels completely separate). (*An additional step is included here for SELECTIVE filtering ONLY*) For each pixel, the value of each pixel in the M x N box around the pixel (excluding the target pixel) is added to an array. The median of this array is taken and that becomes the value of that pixel in the corrected image. This is able to handle edges of the image by simply only including pixels that exist in the median calculation. + +Where noted, for selective filtering ONLY, the absolute value of the difference between the center pixel and each pixel in the MxN box surrounding it is added to an array. The median is taken, and only if the median is greater than a threshold median difference value, the value of the pixel is corrected to the median. + +Overall, median filtering will smooth the image, making each pixel more like its neighbors. This is good for removing outlier (distorted) pixels, but in non-distorted portions of the image, this results in blurring the image. Selective filtering attempts to avoid this by only target pixels that are different enough from their surroundings that we believe they are outliers. This is determined by the threshold value and you can see THRESHOLD ANALYSIS for more details. By only smoothing targeted pixels, the other parts of the image remain sharper and the distorted pixels that may slip through are the least different from their surroundings anyways. + + +THRESHOLD ANALYSIS + +The threshold value is a decimal value between 0 and 1 that is the minimum median difference a pixel must be from its surrounding pixels for filtering to occur when using the selective filtering method. The larger the threshold is, the less noise will be filtered out because only pixels with median differences above the threshold are filtered. This means a value of 0 will perform filtering on all pixels and a value of 1 will not perform filtering on any pixels. Determining the optimal value is a difficult problem and a mixture of manual trial and error and brute force calculations was used to reach the default value of 0.10. + +In the threshold analyis folder is some of the functions used to brute force calculate an ideal threshold. DO NOT try to run, as it takes over 15 to run. The spreadsheet shows the results of the different methods on different images with different levels of distortion. + +Method 2: knows the true number of pixels that were distorted and the median difference of all points. It sorts the median differences from large to small, and takes the value of the (true # of distorted pixels) index of the differences as the threshold. This uses the assumption that all distorted pixels have differences greater than all non-distorted pixels. + +Method 3: knows the location and value of all distorted pixels. It sorts the differences of only the distorted pixels and discards the n% smallest values and the next smallest value is the ideal threshold. This can be run with different discard percents. + +(Method 1 did not work at all so it no longer exists) + +From testing both methods (including different discard percents from method 3) on different images with different levels of distortion, the spreadsheet was produced. A few different means and medians of subsets of the data were calculated and combined with my experience of trial and error, I decided 0.10 was a good all-around value. + +An interesting note is that the results of this brute forcing seem to indicate that a slightly higher threshold should be used as distort percent increases. + +(I know these files are not as well documented, but they are not intended to be run by others) \ No newline at end of file diff --git a/imageDistort.fig b/imageDistort.fig new file mode 100644 index 0000000000000000000000000000000000000000..8e22ed6d520ca2bbb127de836be3497d2f3a3263 GIT binary patch literal 42093 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∈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