generated from Hazel/python-project
feat:
This commit is contained in:
parent
d576f9979c
commit
edd8096030
@ -8,6 +8,7 @@ from PyQt5.QtWidgets import (
|
|||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
|
import scipy.signal
|
||||||
|
|
||||||
import os
|
import os
|
||||||
os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH", None)
|
os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH", None)
|
||||||
@ -43,7 +44,7 @@ def generate_kernel(radius, sigma=None):
|
|||||||
|
|
||||||
|
|
||||||
class KernelVisualizer(QWidget):
|
class KernelVisualizer(QWidget):
|
||||||
def __init__(self):
|
def __init__(self, image_path=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("Gaussian Kernel Visualizer")
|
self.setWindowTitle("Gaussian Kernel Visualizer")
|
||||||
self.image = None
|
self.image = None
|
||||||
@ -80,16 +81,23 @@ class KernelVisualizer(QWidget):
|
|||||||
layout.addLayout(sliders_layout)
|
layout.addLayout(sliders_layout)
|
||||||
layout.addWidget(QLabel("Kernel Visualization:"))
|
layout.addWidget(QLabel("Kernel Visualization:"))
|
||||||
layout.addWidget(self.kernel_canvas)
|
layout.addWidget(self.kernel_canvas)
|
||||||
layout.addWidget(QLabel("Original and Blurred Image:"))
|
layout.addWidget(QLabel("Original and Deconvolved Image:"))
|
||||||
layout.addWidget(self.image_canvas)
|
layout.addWidget(self.image_canvas)
|
||||||
|
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
self.update_visualization()
|
|
||||||
|
|
||||||
def load_image(self):
|
if image_path:
|
||||||
fname, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Images (*.png *.jpg *.bmp *.jpeg)")
|
self.load_image(image_path)
|
||||||
if fname:
|
else:
|
||||||
img = cv2.imread(fname)
|
self.update_visualization()
|
||||||
|
|
||||||
|
def load_image(self, image_path=None):
|
||||||
|
if not image_path:
|
||||||
|
fname, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Images (*.png *.jpg *.bmp *.jpeg)")
|
||||||
|
image_path = fname
|
||||||
|
|
||||||
|
if 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.update_visualization()
|
self.update_visualization()
|
||||||
@ -109,7 +117,21 @@ class KernelVisualizer(QWidget):
|
|||||||
|
|
||||||
if self.image is not None:
|
if self.image is not None:
|
||||||
kernel_size = 2 * radius + 1
|
kernel_size = 2 * radius + 1
|
||||||
blurred = cv2.GaussianBlur(self.image, (kernel_size, kernel_size), sigma)
|
|
||||||
|
# Apply row-by-row deconvolution
|
||||||
|
deconvolved_image = np.zeros_like(self.image)
|
||||||
|
|
||||||
|
# Perform row-wise deconvolution with padded kernel
|
||||||
|
for i in range(self.image.shape[0]):
|
||||||
|
padded_kernel = np.pad(kernel, ((0, self.image.shape[1] - kernel_size), (0, 0)), mode='constant')
|
||||||
|
deconvolved_image[i, :], _ = scipy.signal.deconvolve(self.image[i, :], padded_kernel[i, :])
|
||||||
|
|
||||||
|
# Perform column-wise deconvolution with padded kernel
|
||||||
|
for j in range(self.image.shape[1]):
|
||||||
|
padded_kernel = np.pad(kernel, ((0, self.image.shape[0] - kernel_size), (0, 0)), mode='constant')
|
||||||
|
deconvolved_image[:, j], _ = scipy.signal.deconvolve(self.image[:, j], padded_kernel[:, j])
|
||||||
|
|
||||||
|
deconvolved_image = np.clip(deconvolved_image, 0, 255).astype(np.uint8) # Ensure valid range
|
||||||
|
|
||||||
self.image_fig.clear()
|
self.image_fig.clear()
|
||||||
ax1 = self.image_fig.add_subplot(121)
|
ax1 = self.image_fig.add_subplot(121)
|
||||||
@ -118,8 +140,8 @@ class KernelVisualizer(QWidget):
|
|||||||
ax1.axis('off')
|
ax1.axis('off')
|
||||||
|
|
||||||
ax2 = self.image_fig.add_subplot(122)
|
ax2 = self.image_fig.add_subplot(122)
|
||||||
ax2.imshow(blurred, cmap='gray')
|
ax2.imshow(deconvolved_image, cmap='gray')
|
||||||
ax2.set_title("Blurred")
|
ax2.set_title("Deconvolved")
|
||||||
ax2.axis('off')
|
ax2.axis('off')
|
||||||
|
|
||||||
self.image_canvas.draw()
|
self.image_canvas.draw()
|
||||||
@ -132,7 +154,12 @@ class KernelVisualizer(QWidget):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
image_path = None
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
image_path = sys.argv[1] # Get image path from command-line argument
|
||||||
|
print(image_path)
|
||||||
|
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
viewer = KernelVisualizer()
|
viewer = KernelVisualizer(image_path=image_path)
|
||||||
viewer.show()
|
viewer.show()
|
||||||
sys.exit(app.exec_())
|
sys.exit(app.exec_())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user