diff --git a/deblur/symetric_kernel.py b/deblur/symetric_kernel.py index aab130b..d89a7ba 100644 --- a/deblur/symetric_kernel.py +++ b/deblur/symetric_kernel.py @@ -41,7 +41,6 @@ def generate_kernel(radius, sigma=None): size = 2 * radius + 1 if sigma is None: sigma = radius / 3.0 # Common default choice - print(f"radius: {radius}, sigma: {sigma}") # Create a grid of (x,y) coordinates @@ -113,6 +112,7 @@ class KernelVisualizer(QWidget): super().__init__() self.setWindowTitle("Gaussian Kernel Visualizer") self.image = None + self.deconvolved = None self.load_button = QPushButton("Load Image") self.load_button.clicked.connect(self.load_image) @@ -125,8 +125,8 @@ class KernelVisualizer(QWidget): self.sigma_slider.setRange(1, 300) self.sigma_slider.setValue(15) - # self.radius_slider.valueChanged.connect(self.update_visualization) - # self.sigma_slider.valueChanged.connect(self.update_visualization) + self.radius_slider.valueChanged.connect(self.update_visualization) + self.sigma_slider.valueChanged.connect(self.update_visualization) self.kernel_fig = Figure(figsize=(3, 3)) self.kernel_canvas = FigureCanvas(self.kernel_fig) @@ -139,7 +139,7 @@ class KernelVisualizer(QWidget): self.iter_slider.setValue(10) self.apply_button = QPushButton("Do Deconvolution.") - self.apply_button.clicked.connect(self.update_visualization) + self.apply_button.clicked.connect(self.apply_kernel) layout = QVBoxLayout() layout.addWidget(self.load_button) @@ -188,12 +188,26 @@ class KernelVisualizer(QWidget): img = cv2.imread(image_path) if img is not None: self.image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + self.image = cv2.resize(self.image, (200, 200)) self.update_visualization() + def apply_kernel(self): + radius = self.radius_slider.value() + sigma = self.sigma_slider.value() / 10.0 + iterations = self.iter_slider.value() + + kernel = generate_kernel(radius, sigma) + + self.deconvolved = richardson_lucy(self.image, kernel, iterations=iterations) + + self.update_visualization() + def update_visualization(self): radius = self.radius_slider.value() sigma = self.sigma_slider.value() / 10.0 * (radius / 3) kernel = generate_kernel(radius, sigma) + iterations = self.iter_slider.value() + # Kernel Visualization self.kernel_fig.clear() @@ -204,30 +218,17 @@ class KernelVisualizer(QWidget): self.kernel_canvas.draw() if self.image is not None: - radius = self.radius_slider.value() - sigma = self.sigma_slider.value() / 10.0 - iterations = self.iter_slider.value() - - kernel = generate_kernel(radius, sigma) - blurred = cv2.filter2D(self.image, -1, kernel) - - deconvolved = richardson_lucy(blurred, kernel, iterations=iterations) - self.image_fig.clear() ax1 = self.image_fig.add_subplot(131) ax1.imshow(self.image, cmap='gray') ax1.set_title("Original") ax1.axis('off') - ax2 = self.image_fig.add_subplot(132) - ax2.imshow(blurred, cmap='gray') - ax2.set_title("Blurred") - ax2.axis('off') - - ax3 = self.image_fig.add_subplot(133) - ax3.imshow(deconvolved, cmap='gray') - ax3.set_title(f"Deconvolved (RL, {iterations} iter)") - ax3.axis('off') + if self.deconvolved is not None: + ax3 = self.image_fig.add_subplot(133) + ax3.imshow(self.deconvolved, cmap='gray') + ax3.set_title(f"Deconvolved (RL, {iterations} iter)") + ax3.axis('off') self.image_canvas.draw() else: