This project implements the denoising autoencoder described in the paper βMedical Image Denoising Using Convolutional Denoising Autoencodersβ and compares its performance against median filtering on a dental Xβray dataset.
medical-image-denoising/
βββ notebooks/
β βββ denoising_autoencoder.ipynb # Kaggle/Colab notebook implementing the method
βββ data/
β βββ Dataset/ # Grayscale dental Xβray images (.jpg)
βββ results/
β βββ figures/ # Sample denoising visualizations
β βββ metrics.txt # PSNR comparison results
βββ README.md # This file
- Python 3.7+
- TensorFlow / Keras
- numpy, pandas
- matplotlib, OpenCV
Install via pip:
pip install tensorflow numpy pandas matplotlib opencv-pythonThe dataset consists of 120 grayscale dental Xβray images located in data/Dataset/. Example files:
/kaggle/input/medical-image-dataset/Dataset/1.jpg
/kaggle/input/medical-image-dataset/Dataset/2.jpg
β¦
Images are resized to 64β―Γβ―64 pixels and normalized to [0,1].
A convolutional denoising autoencoder with symmetric encoderβdecoder layers:
- Encoder: two Conv2D+ReLU blocks with 64 filters, followed by MaxPooling
- Decoder: two Conv2D+ReLU blocks with UpSampling, ending in a single-channel sigmoid output
- Loss: binary crossentropy
Model summary:
Input: (64,64,1)
Conv1 β pool1 β Conv2 β pool2 β Conv3 β upsample1 β Conv4 β upsample2 β Conv5
Output: (64,64,1)
- Noise injection: Gaussian noise (Ο=1) scaled by 0.07 is added to clean images.
- Train/test split: first 100 images for training, last 20 for validation.
- Hyperparameters: 40 epochs, batch size 10, Adam optimizer.
- Early stopping: patience=10 on validation loss.
Notebook cell example:
model.fit(x_noisy, x_noisy,
epochs=40,
batch_size=10,
validation_data=(x_test_noisy, x_test_noisy),
callbacks=[EarlyStopping(...)] )-
Visual comparison: plots of original, noisy, denoised (autoencoder), and medianβfiltered images.
-
Quantitative metric: Peak SignalβtoβNoise Ratio (PSNR). Example:
- Autoencoder: 69.89β―dB
- Median filter: 58.46β―dB
Compute PSNR:
def PSNR(orig, denoised):
mse = np.mean((orig - denoised)**2)
return 20 * log10(255.0 / sqrt(mse))- Open
denoising_autoencoder.ipynbin Kaggle or Colab. - Ensure the dataset is available under
data/Dataset/. - Run all cells to preprocess, train, and evaluate.
- View sample outputs in the
results/figures/folder.
- The original paper: Medical Image Denoising Using Convolutional Denoising Autoencoders.
- Median filtering baseline: OpenCV
cv2.medianBlurwith kernel size 5.