generated from Hazel/python-project
stuff
This commit is contained in:
parent
37a5da37b0
commit
54a2138746
@ -41,7 +41,6 @@ def generate_kernel(radius, sigma=None):
|
|||||||
size = 2 * radius + 1
|
size = 2 * radius + 1
|
||||||
if sigma is None:
|
if sigma is None:
|
||||||
sigma = radius / 3.0 # Common default choice
|
sigma = radius / 3.0 # Common default choice
|
||||||
|
|
||||||
print(f"radius: {radius}, sigma: {sigma}")
|
print(f"radius: {radius}, sigma: {sigma}")
|
||||||
|
|
||||||
# Create a grid of (x,y) coordinates
|
# Create a grid of (x,y) coordinates
|
||||||
@ -113,6 +112,7 @@ class KernelVisualizer(QWidget):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("Gaussian Kernel Visualizer")
|
self.setWindowTitle("Gaussian Kernel Visualizer")
|
||||||
self.image = None
|
self.image = None
|
||||||
|
self.deconvolved = None
|
||||||
|
|
||||||
self.load_button = QPushButton("Load Image")
|
self.load_button = QPushButton("Load Image")
|
||||||
self.load_button.clicked.connect(self.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.setRange(1, 300)
|
||||||
self.sigma_slider.setValue(15)
|
self.sigma_slider.setValue(15)
|
||||||
|
|
||||||
# self.radius_slider.valueChanged.connect(self.update_visualization)
|
self.radius_slider.valueChanged.connect(self.update_visualization)
|
||||||
# self.sigma_slider.valueChanged.connect(self.update_visualization)
|
self.sigma_slider.valueChanged.connect(self.update_visualization)
|
||||||
|
|
||||||
self.kernel_fig = Figure(figsize=(3, 3))
|
self.kernel_fig = Figure(figsize=(3, 3))
|
||||||
self.kernel_canvas = FigureCanvas(self.kernel_fig)
|
self.kernel_canvas = FigureCanvas(self.kernel_fig)
|
||||||
@ -139,7 +139,7 @@ class KernelVisualizer(QWidget):
|
|||||||
self.iter_slider.setValue(10)
|
self.iter_slider.setValue(10)
|
||||||
|
|
||||||
self.apply_button = QPushButton("Do Deconvolution.")
|
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 = QVBoxLayout()
|
||||||
layout.addWidget(self.load_button)
|
layout.addWidget(self.load_button)
|
||||||
@ -188,12 +188,26 @@ class KernelVisualizer(QWidget):
|
|||||||
img = cv2.imread(image_path)
|
img = cv2.imread(image_path)
|
||||||
if img is not None:
|
if img is not None:
|
||||||
self.image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
self.image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||||||
|
self.image = cv2.resize(self.image, (200, 200))
|
||||||
self.update_visualization()
|
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):
|
def update_visualization(self):
|
||||||
radius = self.radius_slider.value()
|
radius = self.radius_slider.value()
|
||||||
sigma = self.sigma_slider.value() / 10.0 * (radius / 3)
|
sigma = self.sigma_slider.value() / 10.0 * (radius / 3)
|
||||||
kernel = generate_kernel(radius, sigma)
|
kernel = generate_kernel(radius, sigma)
|
||||||
|
iterations = self.iter_slider.value()
|
||||||
|
|
||||||
|
|
||||||
# Kernel Visualization
|
# Kernel Visualization
|
||||||
self.kernel_fig.clear()
|
self.kernel_fig.clear()
|
||||||
@ -204,30 +218,17 @@ class KernelVisualizer(QWidget):
|
|||||||
self.kernel_canvas.draw()
|
self.kernel_canvas.draw()
|
||||||
|
|
||||||
if self.image is not None:
|
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()
|
self.image_fig.clear()
|
||||||
ax1 = self.image_fig.add_subplot(131)
|
ax1 = self.image_fig.add_subplot(131)
|
||||||
ax1.imshow(self.image, cmap='gray')
|
ax1.imshow(self.image, cmap='gray')
|
||||||
ax1.set_title("Original")
|
ax1.set_title("Original")
|
||||||
ax1.axis('off')
|
ax1.axis('off')
|
||||||
|
|
||||||
ax2 = self.image_fig.add_subplot(132)
|
if self.deconvolved is not None:
|
||||||
ax2.imshow(blurred, cmap='gray')
|
ax3 = self.image_fig.add_subplot(133)
|
||||||
ax2.set_title("Blurred")
|
ax3.imshow(self.deconvolved, cmap='gray')
|
||||||
ax2.axis('off')
|
ax3.set_title(f"Deconvolved (RL, {iterations} iter)")
|
||||||
|
ax3.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')
|
|
||||||
|
|
||||||
self.image_canvas.draw()
|
self.image_canvas.draw()
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user