0% found this document useful (0 votes)
5 views9 pages

21bai1724 MV Lab04

The document outlines a machine vision lab exercise conducted by Shriniwas Chigare, focusing on image processing techniques using Python libraries such as scikit-image and matplotlib. It includes steps for applying minimum, maximum, and median filters to images, along with adding Gaussian noise and visualizing the results. The lab also emphasizes the importance of histogram analysis for the filtered images.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views9 pages

21bai1724 MV Lab04

The document outlines a machine vision lab exercise conducted by Shriniwas Chigare, focusing on image processing techniques using Python libraries such as scikit-image and matplotlib. It includes steps for applying minimum, maximum, and median filters to images, along with adding Gaussian noise and visualizing the results. The lab also emphasizes the importance of histogram analysis for the filtered images.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

ex04

August 20, 2024

MACHINE VISION
LAB 04
NAME - SHRINIVAS CHIGARE
REG.NO - 21BAI1724
[1]: pip install scikit-image numpy matplotlib

Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-


packages (0.23.2)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages
(1.26.4)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-
packages (3.7.1)
Requirement already satisfied: scipy>=1.9 in /usr/local/lib/python3.10/dist-
packages (from scikit-image) (1.13.1)
Requirement already satisfied: networkx>=2.8 in /usr/local/lib/python3.10/dist-
packages (from scikit-image) (3.3)
Requirement already satisfied: pillow>=9.1 in /usr/local/lib/python3.10/dist-
packages (from scikit-image) (9.4.0)
Requirement already satisfied: imageio>=2.33 in /usr/local/lib/python3.10/dist-
packages (from scikit-image) (2.34.2)
Requirement already satisfied: tifffile>=2022.8.12 in
/usr/local/lib/python3.10/dist-packages (from scikit-image) (2024.8.10)
Requirement already satisfied: packaging>=21 in /usr/local/lib/python3.10/dist-
packages (from scikit-image) (24.1)
Requirement already satisfied: lazy-loader>=0.4 in
/usr/local/lib/python3.10/dist-packages (from scikit-image) (0.4)
Requirement already satisfied: contourpy>=1.0.1 in
/usr/local/lib/python3.10/dist-packages (from matplotlib) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-
packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in
/usr/local/lib/python3.10/dist-packages (from matplotlib) (4.53.1)
Requirement already satisfied: kiwisolver>=1.0.1 in
/usr/local/lib/python3.10/dist-packages (from matplotlib) (1.4.5)
Requirement already satisfied: pyparsing>=2.3.1 in
/usr/local/lib/python3.10/dist-packages (from matplotlib) (3.1.2)

1
Requirement already satisfied: python-dateutil>=2.7 in
/usr/local/lib/python3.10/dist-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-
packages (from python-dateutil>=2.7->matplotlib) (1.16.0)

[2]: import numpy as np


from skimage import io, filters
from skimage.morphology import square
import matplotlib.pyplot as plt

[4]: import numpy as np


from skimage import io, filters
import matplotlib.pyplot as plt

def apply_min_filter(image, selem):


return filters.rank.minimum(image, selem)

# Load an image
image = io.imread('/content/1.jpg', as_gray=True)

# Define a structure element (e.g., a 3x3 square)


from skimage.morphology import square
selem = square(3)

# Apply Min filter


min_filtered_image = apply_min_filter(image, selem)

# Display the results


plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title('Min Filtered Image')
plt.imshow(min_filtered_image, cmap='gray')
plt.axis('off')

plt.show()

2
[5]: def apply_max_filter(image, selem):
return filters.rank.maximum(image, selem)

# Apply Max filter


max_filtered_image = apply_max_filter(image, selem)

# Display the results


plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title('Max Filtered Image')
plt.imshow(max_filtered_image, cmap='gray')
plt.axis('off')

plt.show()

3
[6]: from skimage.filters import median

def apply_median_filter(image, selem):


return median(image, selem)

# Apply Median filter


median_filtered_image = apply_median_filter(image, selem)

# Display the results


plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title('Median Filtered Image')
plt.imshow(median_filtered_image, cmap='gray')
plt.axis('off')

plt.show()

4
ANOTHER EXAMPLE
[7]: import numpy as np
from skimage import data, util, filters, morphology
import matplotlib.pyplot as plt

def add_gaussian_noise(image, var=0.1):


""" Add Gaussian noise to an image. """
noisy_image = util.random_noise(image, mode='gaussian', var=var)
return noisy_image

def apply_min_filter(image, selem):


""" Apply Min filter to the image. """
filtered = np.zeros_like(image)
for i in range(image.shape[2]): # Process each color channel
filtered[:, :, i] = filters.rank.minimum(image[:, :, i], selem)
return filtered

def apply_max_filter(image, selem):


""" Apply Max filter to the image. """
# Convert image to 8-bit integer format
image_8bit = (image * 255).astype(np.uint8)
filtered = np.zeros_like(image_8bit)
for i in range(image_8bit.shape[2]): # Process each color channel
filtered[:, :, i] = filters.rank.maximum(image_8bit[:, :, i], selem)
return filtered / 255.0 # Convert back to float range [0, 1]

def apply_median_filter(image, selem):


""" Apply Median filter to the image. """

5
filtered = np.zeros_like(image)
for i in range(image.shape[2]): # Process each color channel
filtered[:, :, i] = filters.median(image[:, :, i], selem)
return filtered

def plot_histogram(image, title):


""" Plot histograms of color channels with attractive colors and style. """
plt.figure(figsize=(14, 8))
plt.suptitle(f'Histograms of {title}', fontsize=16, fontweight='bold')

for i, color in enumerate(['Red', 'Green', 'Blue']):


plt.subplot(3, 1, i+1)
plt.hist(image[:, :, i].ravel(), bins=256, color=color.lower(), alpha=0.
↪75, edgecolor='black')

plt.title(f'{color} Channel', fontsize=14)


plt.xlabel('Pixel Value', fontsize=12)
plt.ylabel('Frequency', fontsize=12)
plt.xlim(0, 1) # Histogram range for normalized images
plt.grid(True, linestyle='--', alpha=0.5)

plt.tight_layout(rect=[0, 0.03, 1, 0.95])


plt.show()

[8]: # Load a sample color image from skimage


image = data.astronaut()

# Add Gaussian noise to the image


noisy_image = add_gaussian_noise(image, var=0.05)

# Define a structure element (e.g., a 3x3 square)


selem = morphology.square(3)

# Apply filters
min_filtered_image = apply_min_filter(noisy_image, selem)
max_filtered_image = apply_max_filter(noisy_image, selem)
median_filtered_image = apply_median_filter(noisy_image, selem)

<ipython-input-8-6557f8a8f207>:11: UserWarning: Possible precision loss


converting image of type float64 to uint8 as required by rank filters. Convert
manually using skimage.util.img_as_ubyte to silence this warning.
min_filtered_image = apply_min_filter(noisy_image, selem)

[9]: # Plot original noisy and filtered images


plt.figure(figsize=(18, 12))

plt.subplot(2, 3, 1)
plt.title('Noisy Image')

6
plt.imshow(noisy_image)
plt.axis('off')

plt.subplot(2, 3, 2)
plt.title('Min Filtered Image')
plt.imshow(min_filtered_image)
plt.axis('off')

plt.subplot(2, 3, 3)
plt.title('Max Filtered Image')
plt.imshow(max_filtered_image)
plt.axis('off')

plt.subplot(2, 3, 4)
plt.title('Median Filtered Image')
plt.imshow(median_filtered_image)
plt.axis('off')

plt.tight_layout()
plt.show()

WARNING:matplotlib.image:Clipping input data to the valid range for imshow with


RGB data ([0..1] for floats or [0..255] for integers).

7
[10]: # Plot histograms for each filtered image separately
plot_histogram(noisy_image, 'Noisy Image')
plot_histogram(min_filtered_image, 'Min Filtered Image')
plot_histogram(max_filtered_image, 'Max Filtered Image')
plot_histogram(median_filtered_image, 'Median Filtered Image')

8
9

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy