如何筛选含相同色彩网格的重复图像?求更优CV实现方案
针对ARG帧去重的优化方案(适配位置偏移场景)
你的核心需求是忽略帧的小幅度位置偏移,仅保留色彩网格结构唯一的帧,现有掩码异或方案会因偏移误判重复帧为不同,以下是更适配的实现思路和代码:
一、先优化现有掩码生成逻辑
原代码分颜色生成掩码再合并,可简化为批量处理,提升效率:
import cv2 import numpy as np COLORS_AS_RGB = np.array([ [255, 22, 1], # red [0, 216, 0], # green [0, 15, 255] # blue ], dtype=np.uint8) def generate_color_mask(img): mask = np.zeros(img.shape[:2], dtype=np.uint8) for color in COLORS_AS_RGB: # 针对单一颜色生成掩码,合并到总掩码 color_mask = cv2.inRange(img, color, color) mask = cv2.bitwise_or(mask, color_mask) return mask
二、适配位置偏移的核心方案
方案1:相位相关对齐后对比(适合刚性平移偏移)
相位相关能精准计算两幅图像的平移偏移量,对齐后再做掩码对比,彻底解决偏移导致的误判:
def align_and_compare(img1, img2, mask1, mask2): # 用相位相关计算平移偏移 shift = cv2.phaseCorrelate(mask1.astype(np.float32), mask2.astype(np.float32))[0] dx, dy = int(round(shift[0])), int(round(shift[1])) # 生成平移变换矩阵,对齐img2到img1的位置 M = np.float32([[1, 0, -dx], [0, 1, -dy]]) aligned_mask2 = cv2.warpAffine(mask2, M, (mask1.shape[1], mask1.shape[0])) # 异或对比,统计差异像素 delta_mask = cv2.bitwise_xor(mask1, aligned_mask2) return cv2.countNonZero(delta_mask) # 去重逻辑 unique_frames = [images[0]] prev_mask = generate_color_mask(images[0]) for img in images[1:]: curr_mask = generate_color_mask(img) diff_pixels = align_and_compare(images[0], img, prev_mask, curr_mask) if diff_pixels > 50: # 阈值可根据实际调整 unique_frames.append(img) prev_mask = curr_mask
方案2:提取网格特征哈希(适合任意小幅度形变偏移)
如果帧存在旋转、缩放类的轻微形变,可提取网格的颜色分布特征,忽略位置信息:
def get_grid_feature(img, grid_size=(16,16)): # 生成颜色掩码 mask = generate_color_mask(img) # 把掩码分成grid_size个网格块 h, w = mask.shape grid_h, grid_w = h // grid_size[0], w // grid_size[1] feature = [] for i in range(grid_size[0]): for j in range(grid_size[1]): # 统计每个网格块内的目标颜色占比 block = mask[i*grid_h:(i+1)*grid_h, j*grid_w:(j+1)*grid_w] ratio = cv2.countNonZero(block) / (grid_h * grid_w) feature.append(round(ratio, 2)) # 保留两位小数,降低噪声 return tuple(feature) # 去重逻辑 feature_set = set() unique_frames = [] for img in images: feat = get_grid_feature(img) if feat not in feature_set: feature_set.add(feat) unique_frames.append(img)
三、选择建议
- 如果帧仅存在平移偏移,优先用相位相关对齐方案,精度最高;
- 如果帧存在旋转、缩放或不规则小偏移,用网格特征哈希方案,鲁棒性更强;
- 阈值(50或特征相似度)需根据实际帧的偏移程度、网格密度调整,建议先测试少量帧确定最优值。
内容的提问来源于stack exchange,提问作者Bsector
相关产品推荐
相关产品推荐

