AAAAAAAAAAAAAAAAAAAA

 avatar
unknown
python
2 years ago
5.1 kB
4
Indexable
import cv2
import numpy as np

# Load the image
image = cv2.imread("Scan5.tif")
original = image
image2 = original

# Get the shape of the image
height, width = image.shape[:2]
kernel_size = int(max(height, width)*0.1)

# Calculating the scale factor
scale_factor = 1/(min(height, width)/600)

# Define the font type, scale, and thickness
font_scale = height * 0.05 / 24 # 24 is the height of the font
font = cv2.FONT_HERSHEY_SIMPLEX
thickness = 10

# Calculate the kernel size as a fraction of the image size

# Make sure the kernel size is odd
if kernel_size % 2 == 0:
    kernel_size += 1

print("kernel size = " + str(kernel_size))
# Create the kernel
kernel_size = 17
kernel = (kernel_size, kernel_size)

#######################################################################

# Convert the image to grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Blur the image to reduce noise
blurred = cv2.medianBlur(gray, kernel_size)

# Blur2 the image to reduce noise
blurred = cv2.GaussianBlur(gray, kernel, 3)

# Calculating the maximuv value of the pixel in the blurred image
maximum = np.max(blurred)

# Threshold the image to extract the object
darkest_px = np.min(gray)
_, thresh = cv2.threshold(blurred, darkest_px+50, 255, cv2.THRESH_BINARY)

# Blur the image to reduce noise
blurred2 = cv2.medianBlur(thresh, kernel_size)
# Calculating the maximuv value of the pixel in the blurred image
maximum2 = np.max(blurred2)
thresh2 = cv2.adaptiveThreshold(blurred2, maximum2, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 3, 3)

# Undo the Erosiohn
dilated = cv2.dilate(thresh, kernel, iterations=4)

# Calculate the median of the image to use as the lower threshold
median = np.median(thresh2)

# # Set the lower and upper thresholds
lower = int(max(0, 0.7 * median))
upper = int(min(255, 1.3 * median))

# Try to use canny

canny = cv2.Canny(thresh2, lower,upper)
blank = np.zeros(image.shape, dtype='uint8')

# Eroding the image
eroded = cv2.erode(canny, (3,3), iterations=1)

contours, hierarchies = cv2.findContours(thresh2, cv2.RETR_LIST, cv2.CHAIN_APPROX_TC89_KCOS)

if len(contours) > 0:
    print("N. contours found: ")
    print(len(contours))
    cv2.drawContours(blank, contours, -1, (0,0, 255), 50)
    cv2.imshow("Contours", cv2.resize(blank, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_AREA))
else:
    print("No contours found")

# Displaying the images

images = [image, blurred,  thresh, thresh2, canny, eroded]
titles = ["Gray", "Blurred", "Thresh", "Thresh2", "Canny Edges", "Eroded"]

# images = [image]
# titles = ["Gray"]

# Calculate Harris corners
gray = cv2.cvtColor(blank, cv2.COLOR_BGR2GRAY)
h_corners = np.float32(gray)



###############################################################################################################################

# Defining the variables for the Harris corner function
window_size = 2
Sobel_derivative_aperture = 3
Harris_detector_free_parameter = 0.04

# Generating the text
text = "(" + str(window_size) + " "+ str(Sobel_derivative_aperture) +" "+ str(Harris_detector_free_parameter) + ")"

# Get the size of the text
text_size, baseline = cv2.getTextSize(text, font, font_scale, thickness)

# Define the text origin and bottom-left position
text_x = width - text_size[0] - 10
text_y = text_size[1] + 10
text = ""

while 1:

    # Draw the text on the image
    dst = cv2.cornerHarris(h_corners, window_size, Sobel_derivative_aperture, Harris_detector_free_parameter)

    # Threshold the result
    dst = cv2.dilate(dst, None)
    image2[dst > 0.01 * dst.max()] = [0, 0, 255]

    # Generating the text
    text = "(" + str(window_size) + " "+ str(Sobel_derivative_aperture) +" "+ str(Harris_detector_free_parameter) + ")"

    # Adding the text to the image
    cv2.putText(image2, text, (text_x, text_y), font, font_scale, (0, 0, 255), thickness)
    cv2.destroyAllWindows()
    cv2.imshow("Test",  cv2.resize(image2, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_AREA))
    cv2.imshow("Original",  cv2.resize(original, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_AREA))
    # image2 = original
    text = ""
    key = cv2.waitKey(0)

    if key == ord('r'):
        break
    elif key == ord('q'):
        window_size = window_size + 1
    elif key == ord('a'):
        window_size = window_size - 1

    elif key == ord('w'):
        Sobel_derivative_aperture = Sobel_derivative_aperture + 2
    elif key == ord('s'):
        Sobel_derivative_aperture = Sobel_derivative_aperture - 2

    elif key == ord('e'):
        Harris_detector_free_parameter = Harris_detector_free_parameter + 0.1
    elif key == ord('d'):
        Harris_detector_free_parameter = Harris_detector_free_parameter - 0.1

cv2.destroyAllWindows()


for i, img in enumerate(images):
    img = cv2.resize(img, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_AREA)
    cv2.imshow(titles[i], img)



cv2.waitKey(0)
cv2.destroyAllWindows()
 
Editor is loading...