首页 > 解决方案 > Python——用于图像分割的图像内的余弦相似度,有用吗?

问题描述

|这些是这个程序产生的星系图像,
你所要做的就是改变图像路径|这些是这个程序产生的图像| |-|-| | 在此处输入图像描述| 在此处输入图像描述| 我有一个想法,用 2 个 for 循环在图像中执行余弦相似度。它有点慢,但它似乎很好地概述了一切,从一碗汤到星系、飞机和文字。我的问题是,我想不出图像分割的用途,尤其是这种,所以我想知道,图像分割有什么用?我真的不知道如何以任何方式使用它。如果代码看起来很乱,请告诉我这是我第一次在这里发帖。另外,我怎样才能让它更快但仍然有效?

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import cv2

def compute_cosine_similarity(x, y):
    x = np.array(x).reshape(1, -1)
    y = np.array(y).reshape(1, -1)
    return cosine_similarity(x, y)

file_path = './natural_images/airplane/airplane_0019.jpg' # natural_images -- kaggle dataset

image = cv2.imread(file_path, cv2.IMREAD_COLOR)

original_image = cv2.imread(file_path, cv2.IMREAD_COLOR)

image_shapes = np.array(image).shape
image_normalized = (np.array(image).reshape\
    (image_shapes[0], image_shapes[1], 3) - 127.5) / 127.5

mask = np.zeros((image_shapes[0], image_shapes[1], 1))

for i in range(0, image_shapes[0] - 16, 4):
    for j in range(0, image_shapes[1] - 16, 4):
        if compute_cosine_similarity(image_normalized[i : i + 8, j : j + 8], \
            image_normalized[i + 8 : i + 16, j + 8 : j + 16]) < 0.75:
            image[i : i + 4, j : j + 4] = (0, 0, 0)
            mask[i : i + 4, j : j + 4] = 1.0

cv2.imshow('Original Image', original_image)
cv2.waitKey(0)

cv2.imshow('Image with Mask', image)
cv2.waitKey(0)

cv2.imshow('Mask', mask)
cv2.waitKey(0)

标签: pythonnumpyimage-segmentationcv2cosine-similarity

解决方案


推荐阅读