+1 (315) 557-6473 

Program To Calculate Average and Standard Deviation of Image in Python Language Assignment Solution.


Instructions

Objective
Write a python homework to calculate average and standard deviation of image in python language.

Requirements and Specifications

Program to calculate average and standard deviation of image in python
Program to calculate average and standard deviation of image in python 1

Source Code

import matplotlib.pyplot as mplot

import numpy as np

#import image

#might get error so use import below

from PIL import Image

import matplotlib.pyplot as plt

import os

files=os.listdir("./data")

N_images = len(files)

# Load the first image and get its size

img = np.array(Image.open("./data/" + files[0])).astype('float')

(h,w,layers) = img.shape

avg_image = np.zeros(img.shape).astype('float')

print("Loading images... ", end = "")

for filename in files:

    img_dir = "./data/" + filename

    img=np.array(Image.open("./data/"+filename))

    avg_image += img

print(f"done. A total of {N_images} images loaded.")

# Calculate average image

print("Calculating average image... ", end="")

avg_image = avg_image / float(N_images)

print("done.")

# Calculate standard deviation image

# Create an array with the same size of the avg image

print("Calculating std image... ", end="")

std_image = np.zeros(avg_image.shape).astype('float')

# Now calculate the std of each pixel for all images

for filename in files:

    img_dir = "./data/" + filename

    img=np.array(Image.open("./data/"+filename))

    std_image += (np.square(img - avg_image) / float(N_images))

std_image = np.sqrt(std_image)

print("done.")

std_image2 = avg_image.std()

# Ask user for treshold

while True:

    threshold = input("Enter STD treshold: ")

    if threshold.isnumeric():

        threshold = float(threshold)

        if threshold >= 0.0 and threshold <= 255.0:

            break

        else:

            print("Please enter a value between 0-255")

    else:

        print("Please enter a numeric treshold value.")

# Now, highlight areas in avg_image

avg_image_highlighted = avg_image.copy()

for row in range(h):

    for col in range(w):

        if std_image[row][col].mean() > threshold: # if pixel's std is higher than treshold

            avg_image_highlighted[row][col] = [255.0, 0.0, 0.0]

fig, axes = plt.subplots(nrows = 1, ncols = 2)

axes[0].imshow(avg_image.astype(np.uint8))

axes[0].set_title('Average Image')

axes[1].imshow(avg_image_highlighted.astype(np.uint8))

axes[1].set_title('Average Image Highlighted')

plt.show()