# # 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)