From 3dc9397b6cef6edd33b7d94d53310d6ce733a2f1 Mon Sep 17 00:00:00 2001 From: LexvanGastel <l.vangastel@studen.utwente.nl> Date: Wed, 2 Apr 2025 15:58:56 +0200 Subject: [PATCH] vraag 25 --- Q2main.py | 57 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/Q2main.py b/Q2main.py index 4fcbded..e23637a 100644 --- a/Q2main.py +++ b/Q2main.py @@ -6,6 +6,7 @@ class ImageProcessor: def __init__(self, image_path): self.image = cv2.imread(image_path) self.image_rgb = cv2.cvtColor(self.image, cv2.COLOR_BGR2RGB) + self.image_hsv = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV) def apply_median_filter(self, kernel_size = 5): filtered_image = cv2.medianBlur(self.image_rgb,kernel_size) @@ -18,20 +19,34 @@ class ImageProcessor: return red_channel, green_channel, blue_channel def convert_to_hsv(self): - hsv_image =cv2.cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV) + return cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV) + def calculate_snr(self, channel): mean = np.mean(channel) stddev = np.std(channel) snr = mean / stddev return snr - + def get_color_masks(self): + lower_red1 = np.array([0, 100, 100]) + upper_red1 = np.array([10, 255, 255]) + lower_red2 = np.array([170, 100, 100]) + upper_red2 = np.array([180, 255, 255]) + + lower_yellow = np.array([22, 100, 100]) + upper_yellow = np.array([32, 255, 255]) + + lower_green = np.array([45, 100, 100]) + upper_green = np.array([72, 255, 255]) + + red_mask = cv2.inRange(self.image_hsv, lower_red1, upper_red1) | cv2.inRange(self.image_hsv, lower_red2, upper_red2) + yellow_mask =cv2.inRange(self.image_hsv, lower_yellow, upper_yellow) + green_mask = cv2.inRange(self.image_hsv, lower_green, upper_green) + + return red_mask, yellow_mask, green_mask class Plotter: - @staticmethod - def __init__(self): - pass @staticmethod def plot_image_channels(image, red, green, blue): @@ -53,7 +68,7 @@ class Plotter: axes[1,1].set_title("blue channel") axes[1,1].axis("off") - #plt.show() + plt.show() @staticmethod def plot_histograms(red, green ,blue): fig, axes = plt.subplots(1,3, figsize =(15,5)) @@ -73,7 +88,7 @@ class Plotter: axes[2].set_xlabel('Pixel Intensity') axes[2].set_ylabel('Frequency') - #plt.show() + plt.show() @staticmethod def plot_filtered_image(original, filtered): @@ -89,10 +104,30 @@ class Plotter: plt.show() + @staticmethod + def plot_color_masks(image, red_mask, yellow_mask, green_mask): + fig, axes = plt.subplots(1, 3, figsize = (18,6)) + + axes[0].imshow(red_mask, cmap='gray') + axes[0].set_title("Red Mask") + axes[0].axis("off") + + axes[1].imshow(yellow_mask, cmap='gray') + axes[1].set_title("Yellow Mask") + axes[1].axis("off") + + axes[2].imshow(green_mask, cmap='gray') + axes[2].set_title("Green Mask") + axes[2].axis("off") + + plt.show() + image_path = "traffic_light_image_1.png" processor = ImageProcessor(image_path) red, green, blue = processor.get_color_channels() +red_mask, yellow_mask, green_mask = processor.get_color_masks() + snr_red = processor.calculate_snr(red) snr_green = processor.calculate_snr(green) snr_blue = processor.calculate_snr(blue) @@ -104,6 +139,8 @@ snr_blue = processor.calculate_snr(blue) filtered_image = processor.apply_median_filter(kernel_size = 5) -Plotter.plot_image_channels(processor.image_rgb,red,green,blue) -Plotter.plot_histograms(red, green, blue) -Plotter.plot_filtered_image(processor.image_rgb, filtered_image) \ No newline at end of file +#Plotter.plot_image_channels(processor.image_rgb,red,green,blue) +#Plotter.plot_histograms(red, green, blue) +#Plotter.plot_filtered_image(processor.image_rgb, filtered_image) +Plotter.plot_color_masks(processor.image_rgb, red_mask, yellow_mask, green_mask) +print(processor.image.shape) \ No newline at end of file -- GitLab