ummtushar's picture
initial commit
60b0ddc verified
# # Imports
# import numpy as np
# import matplotlib.pyplot as plt
# import random
# maincolor = '#4a8cffff'
# secondcolor = '#e06666'
# NOTE: File used in the very beginning of the project. Please ignore!
# # Relative Path PUT YOUR PATHS HERE
# path = 'dc1/data/X_train.npy'
# data = np.load(path)
# # Display some images to see what are we working on
# def display_images(images, num_images=5):
# plt.figure(figsize=(15, 3))
# for i in range(num_images):
# plt.subplot(1, num_images, i + 1)
# plt.imshow(images[i].squeeze(), cmap='gray')
# plt.axis('off')
# plt.show()
# # function call
# display_images(data)
# ########################################################################################################################
# # # 1. Statistical Analysis
# # def compute_statistics(images):
# # # flatten the images since x/y are irrelevant
# # flattened_images = images.flatten()
# # mean_val = np.mean(flattened_images)
# # median_val = np.median(flattened_images)
# # std_dev_val = np.std(flattened_images)
# # return mean_val, median_val, std_dev_val
# # # Compute and print the statistics
# # mean_val, median_val, std_dev_val = compute_statistics(data)
# # print(f"Mean pixel intensity: {mean_val}")
# # print(f"Median pixel intensity: {median_val}")
# # print(f"Standard deviation of pixel intensities: {std_dev_val}")
# # # Global statistics
# # global_mean = np.mean(data)
# # global_std = np.std(data)
# # # Individual image statistics
# # image_means = np.mean(data, axis=(1, 2, 3))
# # image_stds = np.std(data, axis=(1, 2, 3))
# # # Outlier thresholds
# # upper_threshold = global_mean + 3 * global_std
# # lower_threshold = global_mean - 3 * global_std
# # outlier_indices = np.where((image_means > upper_threshold) | (image_means < lower_threshold))[0]
# # print(f"Found {len(outlier_indices)} potential outliers based on pixel intensity means.")
# # ########################################################################################################################
# # # 2. Histogram Analysis
# # def plot_histogram(images, title="Pixel Intensity Distribution"):
# # flattened_images = images.flatten()
# # # Customize plot aesthetics
# # plt.figure(figsize=(10, 6))
# # plt.hist(flattened_images, bins=256, range=(0, 255), color= maincolor, alpha=0.75)
# # # Adding grid, title, and labels with improved aesthetics
# # plt.grid(axis='y', alpha=0.75)
# # plt.title(title, fontsize=15, color='#333333')
# # plt.xlabel('Pixel Intensity', fontsize=12, color='#333333')
# # plt.ylabel('Frequency', fontsize=12, color='#333333')
# # # Customizing tick marks for better readability
# # plt.xticks(fontsize=10, color='#333333')
# # plt.yticks(fontsize=10, color='#333333')
# # # Adding a background color to the plot for contrast
# # ax = plt.gca() # Get current axes
# # ax.set_facecolor('#f0f0f0')
# # ax.figure.set_facecolor('#f8f8f8')
# # # Add a border around the plot for a more polished look
# # for spine in ax.spines.values():
# # spine.set_edgecolor('#d0d0d0')
# # plt.show()
# # # Plot histogram for the entire dataset
# # plot_histogram(data, title="Pixel Intensity Distribution Across Entire Dataset")
# # # Plot a selected image
# # plot_histogram(data[10], title="Pixel Intensity Distribution of a Selected Image")
# def plot_histogram_with_images(images, num_images=5):
# # Select a set of random images
# random_indices = random.sample(range(images.shape[0]), num_images)
# for index in random_indices:
# # Extract a single image
# single_xray_image = images[index]
# # Flatten the image for histogram
# flattened_image = single_xray_image.flatten()
# # Create a figure with 2 subplots
# fig, axs = plt.subplots(1, 2, figsize=(12, 6))
# # Plot histogram on the first subplot
# axs[0].hist(flattened_image, bins=256, range=(0, 255), color=maincolor, alpha=0.75)
# axs[0].set_title('Pixel Intensity Distribution')
# axs[0].set_xlabel('Pixel Intensity')
# axs[0].set_ylabel('Frequency')
# axs[0].set_ylim(0,600)
# axs[0].grid(True)
# # Show the image on the second subplot
# axs[1].imshow(single_xray_image.squeeze(), cmap='gray')
# axs[1].set_title('X-Ray Image')
# axs[1].axis('off')
# plt.tight_layout()
# plt.show()
# plot_histogram_with_images(data)
# # 3. Plot for Accuracy, Precision and # Recall
# def plot_metrics_evolution(epochs, accuracy, precision):
# import matplotlib.pyplot as plt
# plt.rcParams.update({'font.size': 12})
# plt.figure(figsize=(12, 8))
# plt.plot(epochs, accuracy, label='Accuracy', marker='o', linestyle='-', color=maincolor)
# plt.plot(epochs, precision, label='Precision', marker='s', linestyle='--', color=secondcolor)
# # plt.plot(epochs, recall, label='Recall', marker='^', linestyle='-.', color='red')
# plt.title('Model Performance Over 10 Epochs')
# plt.xlabel('Epoch')
# plt.ylabel('Score')
# plt.xticks(epochs)
# plt.legend()
# plt.grid(True)
# plt.show()
# # Data
# epochs = list(range(1, 11))
# accuracy = [0.1884, 0.1968, 0.1985, 0.2200, 0.2122, 0.2208, 0.2340, 0.2337, 0.2318, 0.2384]
# precision = [0.1664, 0.3518, 0.2644, 0.3144, 0.3137, 0.3212, 0.2983, 0.3108, 0.2635, 0.3081]
# # recall = [0.1884, 0.1968, 0.1985, 0.2200, 0.2122, 0.2208, 0.2340, 0.2337, 0.2318, 0.2384]
# # Example function call
# plot_metrics_evolution(epochs, accuracy, precision)