Files
琉璃月光 df7c0730f5 bushu
2025-10-21 14:11:52 +08:00

56 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from skimage import feature
import cv2
import numpy as np
import os
# 图像路径
img_path = "2.jpg"
# ✅ 1. 检查文件是否存在
if not os.path.exists(img_path):
raise FileNotFoundError(f"图像文件不存在,请检查路径: {img_path}")
# ✅ 2. 以灰度模式读取图像
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
if img is None:
raise ValueError(f"无法读取图像,可能是文件损坏或格式问题: {img_path}")
print(f"✅ 图像加载成功,原始尺寸: {img.shape}")
'''
height, width = img.shape
start_row = height // 3 * 2 # 从 2/3 处开始,到底部
bottom_region = img[start_row:, :] # 所有列,只取底部 1/3 行
print(f"✅ 裁剪出底部 1/3 区域,尺寸: {bottom_region.shape}")
'''
# ✅ 3. 提取最下方三分之一的区域
bottom_region = img
# ✅ 4. 计算 GLCM建议降低 levels 或使用压缩)
# 注意levels=256 对计算资源要求高,可考虑先归一化到 32 或 64 灰度级
# 这里我们先保持 256若报内存错误可改用降级方法
glcm = feature.graycomatrix(
bottom_region,
distances=[1],
angles=[0, np.pi/4, np.pi/2, 3*np.pi/4], # 多方向
levels=256,
symmetric=True,
normed=True
)
# ✅ 5. 提取平均纹理特征(在所有方向上取均值)
properties = ['contrast', 'dissimilarity', 'homogeneity', 'energy', 'correlation']
features = {}
for prop in properties:
values = feature.graycoprops(glcm, prop)[0]
features[prop] = np.mean(values) # 对多个角度取平均
# ✅ 6. 输出结果
print("\n📊 图像底部 1/3 区域的纹理特征:")
print(f"Contrast: {features['contrast']:.3f}") # 越大越粗糙230
print(f"Dissimilarity: {features['dissimilarity']:.3f}") # 越大差异越大7.265
print(f"Homogeneity: {features['homogeneity']:.3f}") # 越小越不均匀粗糙0.291
print(f"Energy: {features['energy']:.3f}") # 越小越复杂纹理丰富0.033
print(f"Correlation: {features['correlation']:.3f}") # 灰度线性相关性0.941