TransformSuite / app.py
Ritabrata04's picture
cast to uint8
39ab3eb
import gradio as gr
import cv2
from transforms import *
import numpy as np
# Wrapper function to call the correct transform
def apply_transform(image, domain, transform):
img, img_type = load_image(image)
result = None # Initialize result to avoid UnboundLocalError
if domain == 'Spatial':
if transform == 'Histogram Equalization':
result = histogram_equalization(img)
elif transform == 'Sobel Edge Detection':
result = sobel_edge_detection(img)
elif transform == 'Gaussian Blur':
result = gaussian_blur(img)
elif transform == 'Laplacian of Gaussian':
result = laplacian_of_gaussian(img)
elif transform == 'Median Filter':
result = median_filter(img)
else:
return "Invalid spatial transform selection."
elif domain == 'Frequency':
if transform == 'Fourier Transform':
result = fourier_transform(img)
# Normalize the Fourier transform result to fit within 0-255 for visualization
result = np.abs(result)
result = 255 * result / np.max(result)
result = result.astype(np.uint8)
elif transform == 'Discrete Cosine Transform':
result = discrete_cosine_transform(img)
result = 255 * result / np.max(result)
result = result.astype(np.uint8)
elif transform == 'High-Pass Filter':
result = high_pass_filter(img)
elif transform == 'Low-Pass Filter':
result = low_pass_filter(img)
elif transform == 'Wavelet Transform':
result = wavelet_transform(img)
result = 255 * result / np.max(result) # Normalize wavelet transform output
result = result.astype(np.uint8)
else:
return "Invalid frequency transform selection."
else:
return "Invalid domain selection."
# Ensure that result has been assigned
if result is None:
return "An error occurred while processing the image."
return result
# Gradio Interface
def interface():
image_input = gr.Image(type="numpy", label="Input Image") # Updated input
domain_input = gr.Dropdown(choices=["Spatial", "Frequency"], label="Transform Domain")
transform_input = gr.Dropdown(
choices=[
"Histogram Equalization", "Sobel Edge Detection", "Gaussian Blur",
"Laplacian of Gaussian", "Median Filter",
"Fourier Transform", "Discrete Cosine Transform", "High-Pass Filter",
"Low-Pass Filter", "Wavelet Transform"
],
label="Transform Type"
)
outputs = gr.Image(type="numpy", label="Transformed Image") # Updated output
gr.Interface(
fn=apply_transform,
inputs=[image_input, domain_input, transform_input],
outputs=outputs,
title="TransformSuite: Image Filtering & Transforms",
description="Choose between spatial or frequency domain transforms and apply various filters to the input image."
).launch()
if __name__ == "__main__":
interface()