Files
uni/year4/semester1/CT404: Graphics & Image Processing/assignments/assignment2/code/task1/5-7.py
2024-11-14 10:45:13 +00:00

41 lines
1.4 KiB
Python

import cv2
import numpy as np
# Load and pre-process binary image
binary_image = cv2.imread("./output/kernel_size_17.jpg", cv2.IMREAD_GRAYSCALE)
binary_image = cv2.medianBlur(binary_image, 3)
# Step 1.5: Extraction of Binary Regions of Interest / connected components
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_image, connectivity=8)
# Initialize an empty mask for filtered regions
filtered_mask = np.zeros(binary_image.shape, dtype=np.uint8)
total_globules = 0
# Task 1.6: Filtering of Fat Globules
for i in range(1, num_labels):
area = stats[i, cv2.CC_STAT_AREA]
# Calculate compactness
perimeter = cv2.arcLength(cv2.findContours((labels == i).astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0][0], True)
compactness = (perimeter ** 2) / area if area > 0 else 0
if (300 < area) and (compactness < 27):
total_globules += 1
filtered_mask[labels == i] = 255
cv2.imwrite("./output/filtered_fat_globules.jpg", filtered_mask)
print("Total globules: " + str(total_globules))
# Task 1.7: Calculation of the Fat Area
# Total area of the image in pixels (excluding the background)
total_image_area = binary_image.shape[0] * binary_image.shape[1]
# Total fat area (in pixels)
fat_area = np.sum(filtered_mask == 255)
# Calculate fat percentage
fat_percentage = (fat_area / total_image_area) * 100
print(f"Fat Area Percentage: {fat_percentage:.2f}%")