File size: 2,187 Bytes
a176aa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- coding: utf-8 -*-
"""

Created on Tue Dec 10 09:15:10 2024



This code calculates the edge density of an image in blocks. It uses Canny edge detection to identify edges and calculates

the percentage of edge pixels in each block. The results can be used to analyze features such as wrinkles on fruit surfaces.



@author: jishu

"""

import cv2
import numpy as np

def calculate_edge_density(image, block_size=(50, 50)):
    """

    Calculates edge density in blocks for a given image.



    Parameters:

        image_path (str): Path to the input image.

        block_size (tuple): Dimensions of the blocks (height, width).



    Returns:

        list: Edge densities for each block (in percentage).

    """
    
    if image is None:
        print("Error: Image not found!")
        return None

    # Step 2: Resize the image for consistent processing
    resized_image = cv2.resize(image, (512, 512))

    # Step 3: Apply Gaussian Blur to reduce noise
    blurred = cv2.GaussianBlur(resized_image, (5, 5), 0)

    # Step 4: Perform Canny edge detection
    edges = cv2.Canny(blurred, threshold1=50, threshold2=100)

    # Step 5: Display the edge-detected image using OpenCV
    # cv2.imshow("Edge Detection", edges)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()

    # Step 6: Calculate edge density for each block
    densities = []
    height, width = edges.shape
    block_height, block_width = block_size

    # Loop through the image in blocks
    for y in range(0, height, block_height):
        for x in range(0, width, block_width):
            # Define the block region
            block = edges[y:y+block_height, x:x+block_width]
            
            # Handle the case where the block goes out of image bounds
            block = block[:block_height, :block_width]
            
            # Calculate edge density
            edge_pixels = np.sum(block == 255)  # White pixels in the Canny output
            total_pixels = block.size
            density = (edge_pixels / total_pixels) * 100  # Convert to percentage
            densities.append(density)

    return np.mean(np.array(densities))