Assignment-09
Assignment-09
● Write code to perform dilation and erosion operations on a noisy grayscale image using Python.
● Experiment with different structuring elements (e.g., square, disk, diamond) and compare how they affect the
output of dilation and erosion.
Ans:
import cv2
import numpy as np
import urllib.request
def read_image_from_url(url):
resp = urllib.request.urlopen(url)
return image
def dilation_erosion_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
"Square": square(5),
"Disk": disk(5),
"Diamond": diamond(5)
results = {}
plt.figure(figsize=(18, 12))
plt.subplot(4, 3, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(4, 3, idx)
plt.title(f"Dilation - {name}")
plt.imshow(dilated, cmap='gray')
plt.axis('off')
idx += 1
plt.subplot(4, 3, idx)
plt.title(f"Erosion - {name}")
plt.imshow(eroded, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Example usage
dilation_erosion_operations(image_url)
2. Opening Operation:
import cv2
import numpy as np
import urllib.request
def read_image_from_url(url):
resp = urllib.request.urlopen(url)
return image
def dilation_erosion_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
"Square": square(5),
"Disk": disk(5),
"Diamond": diamond(5)
results = {}
for name, element in structuring_elements.items():
plt.figure(figsize=(18, 12))
plt.subplot(4, 3, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(4, 3, idx)
plt.title(f"Dilation - {name}")
plt.imshow(dilated, cmap='gray')
plt.axis('off')
idx += 1
plt.subplot(4, 3, idx)
plt.title(f"Erosion - {name}")
plt.imshow(eroded, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def opening_operations(image_url):
image = read_image_from_url(image_url)
# Step 2: Define structuring elements
structuring_elements = {
results = {}
results[name] = opened
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Opening - {name}")
plt.imshow(opened, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Example usage
opening_operations(image_url)
3. Closing Operation:
ANS:
import cv2
import numpy as np
import urllib.request
def read_image_from_url(url):
resp = urllib.request.urlopen(url)
return image
def dilation_erosion_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
"Square": square(5),
"Disk": disk(5),
"Diamond": diamond(5)
plt.figure(figsize=(18, 12))
plt.subplot(4, 3, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(4, 3, idx)
plt.title(f"Dilation - {name}")
plt.imshow(dilated, cmap='gray')
plt.axis('off')
idx += 1
plt.subplot(4, 3, idx)
plt.title(f"Erosion - {name}")
plt.imshow(eroded, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def opening_operations(image_url):
image = read_image_from_url(image_url)
# Step 2: Define structuring elements
structuring_elements = {
results = {}
results[name] = opened
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Opening - {name}")
plt.imshow(opened, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def closing_operations(image_url):
# Step 1: Read the image from the URL
image = read_image_from_url(image_url)
structuring_elements = {
results = {}
results[name] = closed
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Closing - {name}")
plt.imshow(closed, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Example usage
4. Morphological Gradient:
● Apply the morphological gradient operation on a grayscale image using different structuring elements such as
rectangles, circles, and crosses.
● Visualize and analyze the differences in results obtained with different structuring elements.
ANS:
import cv2
import numpy as np
import urllib.request
def read_image_from_url(url):
resp = urllib.request.urlopen(url)
return image
def dilation_erosion_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
"Square": square(5),
"Disk": disk(5),
"Diamond": diamond(5)
results = {}
for name, element in structuring_elements.items():
plt.figure(figsize=(18, 12))
plt.subplot(4, 3, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(4, 3, idx)
plt.title(f"Dilation - {name}")
plt.imshow(dilated, cmap='gray')
plt.axis('off')
idx += 1
plt.subplot(4, 3, idx)
plt.title(f"Erosion - {name}")
plt.imshow(eroded, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def opening_operations(image_url):
image = read_image_from_url(image_url)
# Step 2: Define structuring elements
structuring_elements = {
results = {}
results[name] = opened
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Opening - {name}")
plt.imshow(opened, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def closing_operations(image_url):
image = read_image_from_url(image_url)
# Step 2: Define structuring elements
structuring_elements = {
results = {}
results[name] = closed
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Closing - {name}")
plt.imshow(closed, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def morphological_gradient_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
results = {}
results[name] = gradient
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Gradient - {name}")
plt.imshow(gradient, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Example usage
morphological_gradient_operations(image_url)
5. Top Hat Operation:
● Apply the top hat operation on a grayscale image using different structuring elements such as rectangles, circles,
and crosses.
● Examine the output images and discuss the effects of different structuring elements on the results.
import cv2
import numpy as np
import urllib.request
def read_image_from_url(url):
resp = urllib.request.urlopen(url)
return image
def dilation_erosion_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
"Square": square(5),
"Disk": disk(5),
"Diamond": diamond(5)
results = {}
for name, element in structuring_elements.items():
plt.figure(figsize=(18, 12))
plt.subplot(4, 3, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(4, 3, idx)
plt.title(f"Dilation - {name}")
plt.imshow(dilated, cmap='gray')
plt.axis('off')
idx += 1
plt.subplot(4, 3, idx)
plt.title(f"Erosion - {name}")
plt.imshow(eroded, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def opening_operations(image_url):
image = read_image_from_url(image_url)
# Step 2: Define structuring elements
structuring_elements = {
results = {}
results[name] = opened
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Opening - {name}")
plt.imshow(opened, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
def closing_operations(image_url):
structuring_elements = {
results = {}
results[name] = closed
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Closing - {name}")
plt.imshow(closed, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
image = read_image_from_url(image_url)
structuring_elements = {
results = {}
results[name] = gradient
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.title(f"Gradient - {name}")
plt.imshow(gradient, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Function to perform top hat operation
def top_hat_operations(image_url):
image = read_image_from_url(image_url)
structuring_elements = {
results = {}
results[name] = top_hat
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')
plt.axis('off')
idx = 2
plt.subplot(2, 2, idx)
plt.imshow(top_hat, cmap='gray')
plt.axis('off')
idx += 1
plt.tight_layout()
plt.show()
# Example usage
● Apply the black hat operation on a grayscale image using different structuring
import cv2
import numpy as np
import requests
def load_image_from_url(url):
response = requests.get(url)
return image
image_url = 'https://encrypted-
tbn0.gstatic.com/images?q=tbn:ANd9GcQ3VeYXSb6lCYDJJwi2XFj7Mtn3dmR9QdHafA&s'
image = load_image_from_url(image_url)
if image is None:
else:
plt.figure(figsize=(10, 10))
plt.subplot(2, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(2, 2, 2)
plt.imshow(black_hat_rect, cmap='gray')
plt.axis('off')
plt.subplot(2, 2, 3)
plt.imshow(black_hat_circle, cmap='gray')
plt.axis('off')
plt.subplot(2, 2, 4)
plt.imshow(black_hat_cross, cmap='gray')
plt.axis('off')
plt.tight_layout()
plt.show()