This commit is contained in:
Hazel Noack 2025-05-07 16:48:07 +02:00
parent 37a5da37b0
commit 54a2138746

View File

@ -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: