1 import cv2 2 import numpy as np 3 4 # 讀取原始影像 5 original_image = cv2.imread('train16.png') 6 7 # 高斯模糊處理 8 blurred_image = cv2.GaussianBlur(original_image, (5, 5), 0) 9 10 # 計算新影像 11 new_image = cv2.subtract(original_image, blurred_image) 12 13 # 轉換新影像為灰度圖 14 gray_new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2GRAY) 15 16 # 計算影像的形狀 17 M, N = gray_new_image.shape 18 19 # 計算新影像的灰度加權質心 20 sum_intensity = np.sum(gray_new_image) 21 22 # 計算加權和 23 sum_x = 0.0 24 sum_y = 0.0 25 26 for y in range(M): 27 for x in range(N): 28 sum_x += x * gray_new_image[y, x] 29 sum_y += y * gray_new_image[y, x] 30 31 x_c = int(sum_x / sum_intensity) 32 y_c = int(sum_y / sum_intensity) 33 34 # 設定框的大小引數 35 box_scale = 0.45 # 框相對於影像大小的比例 36 37 # 計算框的大小 38 box_width = int(N * box_scale) 39 box_height = int(M * box_scale) 40 41 # 計算框的左上角和右下角座標 42 x1 = max(0, x_c - box_width // 2) 43 y1 = max(0, y_c - box_height // 2) 44 x2 = min(N, x_c + box_width // 2) 45 y2 = min(M, y_c + box_height // 2) 46 47 # 在原始影像上同時標註質心和框 48 image_with_center_and_box = original_image.copy() 49 image_with_center_and_box = cv2.circle(image_with_center_and_box, (x_c, y_c), 5, (255, 0, 0), -1)# 在質心位置畫一個藍色實心圓 50 image_with_center_and_box = cv2.rectangle(image_with_center_and_box, (x1, y1), (x2, y2), (0, 255, 0), 2) # 在框的位置畫一個綠色矩形
對輸入的影像進行高斯模糊處理,計算出新影像後,找到影像的灰度加權質心,並在該質心周圍繪製一個矩形框,用於標記影像中的重要區域。《
Analysis and comparison of automatic image focusing algorithms in digital
image processing
》
blurred_image = cv2.GaussianBlur(original_image, (5, 5), 0): 對原始影像進行高斯模糊處理,使用5x5的核心大小。
new_image = cv2.subtract(original_image, blurred_image): 計算原始影像與模糊影像的差異,得到新的影像。
gray_new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2GRAY): 將新影像轉換為灰度影像,方便後續處理。
獲取影像的形狀資訊:
M, N = gray_new_image.shape: 獲取灰度影像的高度和寬度。
計算新影像的灰度加權質心:
遍歷影像的每個畫素,計算加權和以及加權質心的座標。
計算框的大小和位置:
box_scale = 0.45: 設定框相對於影像大小的比例。
根據加權質心的座標和比例計算框的大小。
計算框的左上角和右下角座標,確保框在影像範圍內。