All done
parent
074c92c93d
commit
9ef3629e00
|
@ -187,8 +187,8 @@ def one_e(distances: list, selected_dists: list):
|
||||||
|
|
||||||
def ex2():
|
def ex2():
|
||||||
two_b()
|
two_b()
|
||||||
#two_d()
|
two_d()
|
||||||
#two_e()
|
two_e()
|
||||||
|
|
||||||
def two_b():
|
def two_b():
|
||||||
"""
|
"""
|
||||||
|
@ -209,7 +209,7 @@ def two_b():
|
||||||
"""
|
"""
|
||||||
signal = uz_text.read_data('./data/signal.txt')
|
signal = uz_text.read_data('./data/signal.txt')
|
||||||
kernel = uz_text.read_data('./data/kernel.txt')
|
kernel = uz_text.read_data('./data/kernel.txt')
|
||||||
convolved_signal = uz_image.simple_convolution_improved(signal, kernel)
|
convolved_signal = uz_image.simple_convolution(signal, kernel)
|
||||||
|
|
||||||
cv2_convolved_signal = cv2.filter2D(signal, cv2.CV_64F, kernel)
|
cv2_convolved_signal = cv2.filter2D(signal, cv2.CV_64F, kernel)
|
||||||
|
|
||||||
|
@ -287,6 +287,7 @@ def two_e():
|
||||||
################################
|
################################
|
||||||
# EXCERCISE 3: Image Filtering #
|
# EXCERCISE 3: Image Filtering #
|
||||||
################################
|
################################
|
||||||
|
|
||||||
def ex3():
|
def ex3():
|
||||||
three_a()
|
three_a()
|
||||||
three_b()
|
three_b()
|
||||||
|
@ -454,9 +455,9 @@ def three_e():
|
||||||
# ######## #
|
# ######## #
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
#ex1()
|
ex1()
|
||||||
#ex2()
|
#ex2()
|
||||||
ex3()
|
#ex3()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -219,7 +219,10 @@ def get_image_bins(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]
|
||||||
return counts
|
return counts
|
||||||
|
|
||||||
def get_image_bins_ND(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], number_of_bins: int) -> npt.NDArray[np.float64]:
|
def get_image_bins_ND(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], number_of_bins: int) -> npt.NDArray[np.float64]:
|
||||||
|
"""
|
||||||
|
Accepts image in the float64 format or uint8 and number of bins
|
||||||
|
Returns normailzed image histogram bins
|
||||||
|
"""
|
||||||
bs = []
|
bs = []
|
||||||
hist = np.zeros((number_of_bins, number_of_bins, number_of_bins))
|
hist = np.zeros((number_of_bins, number_of_bins, number_of_bins))
|
||||||
if image.dtype.type == np.uint8:
|
if image.dtype.type == np.uint8:
|
||||||
|
@ -239,6 +242,10 @@ def get_image_bins_ND(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint
|
||||||
return hist / np.sum(hist)
|
return hist / np.sum(hist)
|
||||||
|
|
||||||
def compare_two_histograms(h1: npt.NDArray[np.float64], h2: npt.NDArray[np.float64], method: DistanceMeasure) -> float:
|
def compare_two_histograms(h1: npt.NDArray[np.float64], h2: npt.NDArray[np.float64], method: DistanceMeasure) -> float:
|
||||||
|
"""
|
||||||
|
Accepts two histograms and method of comparison
|
||||||
|
Returns distance between them
|
||||||
|
"""
|
||||||
|
|
||||||
if method == DistanceMeasure.euclidian_distance:
|
if method == DistanceMeasure.euclidian_distance:
|
||||||
d = np.sqrt(np.sum(np.square(h1 - h2)))
|
d = np.sqrt(np.sum(np.square(h1 - h2)))
|
||||||
|
@ -361,6 +368,10 @@ def gaussfilter2D(image: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]],
|
||||||
return filtered_image
|
return filtered_image
|
||||||
|
|
||||||
def simple_median(signal: npt.NDArray[np.float64], width: int):
|
def simple_median(signal: npt.NDArray[np.float64], width: int):
|
||||||
|
"""
|
||||||
|
Accepts: signal & width
|
||||||
|
returns signal improved using median filter
|
||||||
|
"""
|
||||||
if width % 2 == 0:
|
if width % 2 == 0:
|
||||||
raise Exception('No u won\'t do that')
|
raise Exception('No u won\'t do that')
|
||||||
|
|
||||||
|
@ -371,6 +382,10 @@ def simple_median(signal: npt.NDArray[np.float64], width: int):
|
||||||
return signal
|
return signal
|
||||||
|
|
||||||
def apply_median_method_2D(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], width: int):
|
def apply_median_method_2D(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], width: int):
|
||||||
|
"""
|
||||||
|
Accepts: image & filter width
|
||||||
|
returns: image with median filter applied
|
||||||
|
"""
|
||||||
if width % 2 == 0:
|
if width % 2 == 0:
|
||||||
raise Exception('No u won\'t do that')
|
raise Exception('No u won\'t do that')
|
||||||
|
|
||||||
|
@ -394,6 +409,10 @@ def apply_median_method_2D(image:Union[npt.NDArray[np.float64], npt.NDArray[np.u
|
||||||
return image
|
return image
|
||||||
|
|
||||||
def filter_laplace(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], sigma: float):
|
def filter_laplace(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], sigma: float):
|
||||||
|
"""
|
||||||
|
Accepts: image & sigma
|
||||||
|
returns: image with laplace filter applied
|
||||||
|
"""
|
||||||
# Prepare unit impulse and gauss kernel
|
# Prepare unit impulse and gauss kernel
|
||||||
unit_impulse = np.zeros((1, 2 * int(np.ceil(3*sigma)) + 1))
|
unit_impulse = np.zeros((1, 2 * int(np.ceil(3*sigma)) + 1))
|
||||||
unit_impulse[0][int(np.ceil(unit_impulse.size /2)) - 1]= 1
|
unit_impulse[0][int(np.ceil(unit_impulse.size /2)) - 1]= 1
|
||||||
|
@ -409,6 +428,10 @@ def filter_laplace(image:Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]],
|
||||||
return applied_by_y
|
return applied_by_y
|
||||||
|
|
||||||
def gauss_noise(I, magnitude=.1):
|
def gauss_noise(I, magnitude=.1):
|
||||||
|
"""
|
||||||
|
Accepts: image & magnitude
|
||||||
|
Returns: image with gaussian noise applied
|
||||||
|
"""
|
||||||
# input: image, magnitude of noise
|
# input: image, magnitude of noise
|
||||||
# output: modified image
|
# output: modified image
|
||||||
I = I.copy()
|
I = I.copy()
|
||||||
|
@ -417,6 +440,10 @@ def gauss_noise(I, magnitude=.1):
|
||||||
|
|
||||||
|
|
||||||
def sp_noise(I, percent=.1):
|
def sp_noise(I, percent=.1):
|
||||||
|
"""
|
||||||
|
Accepts: image & percent
|
||||||
|
Returns: image with salt and pepper noise applied
|
||||||
|
"""
|
||||||
# input: image, percent of corrupted pixels
|
# input: image, percent of corrupted pixels
|
||||||
# output: modified image
|
# output: modified image
|
||||||
|
|
||||||
|
@ -427,6 +454,10 @@ def sp_noise(I, percent=.1):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def sp_noise1D(signal, percent=.1):
|
def sp_noise1D(signal, percent=.1):
|
||||||
|
"""
|
||||||
|
Accepts: signal & percent
|
||||||
|
Returns: signal with salt and pepper noise applied
|
||||||
|
"""
|
||||||
signal = signal.copy()
|
signal = signal.copy()
|
||||||
signal[np.random.rand(signal.shape[0]) < percent / 2] = 2
|
signal[np.random.rand(signal.shape[0]) < percent / 2] = 2
|
||||||
signal[np.random.rand(signal.shape[0]) < percent / 2] = 1
|
signal[np.random.rand(signal.shape[0]) < percent / 2] = 1
|
||||||
|
@ -435,5 +466,10 @@ def sp_noise1D(signal, percent=.1):
|
||||||
return signal
|
return signal
|
||||||
|
|
||||||
def sum_two_grayscale_images(image_a: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], image_b :Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]) -> Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]:
|
def sum_two_grayscale_images(image_a: Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]], image_b :Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]) -> Union[npt.NDArray[np.float64], npt.NDArray[np.uint8]]:
|
||||||
|
"""
|
||||||
|
Accepts: image_a, image_b
|
||||||
|
Returns: image_a + image_b
|
||||||
|
"""
|
||||||
|
|
||||||
# Merge image_a and image_b
|
# Merge image_a and image_b
|
||||||
return (image_a + image_b)/ 2
|
return (image_a + image_b)/ 2
|
||||||
|
|
Loading…
Reference in New Issue