gpt4 book ai didi

python - 将图像裁剪到对象区域的面积

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:23 25 4
gpt4 key购买 nike

我将把纹理识别应用于不同的花卉图片,并考虑使用 GLCM 进行特征提取。在应用 GLCM 之前,我应该将 RGB 图像转换为灰度图像。我还想从灰度图像中减去背景信息,以仅应用 GLCM 花卉对象的像素来消除噪声。我正在考虑使用skimage。如何从灰度图像中减去背景像素以确保大多数像素属于花卉对象?

最佳答案

如果背景像素具有恒定的强度值(例如 0),您可以使用 Using skimage for non-rectangular image areas 中提出的任何方法。或Python: taking the GLCM of a non-rectangular region 。请注意,这些方法会产生近似的 GLCM,因为与背景像素具有相同强度级别的图像像素被从共现分析中丢弃。

如果您想计算感兴趣区域上的所有共现,而不丢弃 ROI 内的任何像素,以下代码片段可能会让您走上正轨:

import numpy as np 
from skimage import io, color, util
from skimage.feature.texture import greycoprops
import matplotlib.pyplot as plt

def glcm_roi(img, mask, dh=1, dv =0, levels=256):
glcm = np.zeros(shape=(levels, levels), dtype=np.int_)
for i in range(img.shape[0] - dv):
for j in range(img.shape[1] - dh):
if mask[i, j] and mask[i + dv, j + dh]:
glcm[img[i, j], img[i + dv, j + dv]] += 1
return glcm/glcm.sum()

arr = io.imread('/image/q6cpu.png')
mask = arr[:, :, -1] > 0
img = util.img_as_ubyte(color.rgb2gray(arr[:, :, :-1]))

glcm = glcm_roi(img, mask)
energy = greycoprops(glcm[:, :, None, None], 'energy')
print('Energy = {}'.format(energy))

fig, ax = plt.subplots(1, 3)
ax[0].imshow(arr)
ax[0].set_title('RGB')
ax[1].imshow(img, cmap='gray')
ax[1].set_title('Gray')
ax[2].imshow(mask, cmap='gray')
ax[2].set(title='Mask')
for axi in ax: axi.set_axis_off()
plt.show(fig)

输出:

[[0.15203625]]

Results

关于python - 将图像裁剪到对象区域的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53100183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com