Image wavelet histogram

博客提到小波可用于图像纹理信息的快速索引,认为这是一个很好的研究方向。作者接下来要了解小波直方图的模式和计算算法,并打算做实验,为此需广泛阅读相关论文。

Wavelet can be used for fast indexing the texture information of the image. Very cool. It will be a good direction of study.

The following I should understand:

1.The pattern of wavelet histogram

2.The algorithm of computing the wavelet histogram

Do some experiment!

So first, I should read paper widely.

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
将以下代码的运行修改为将一个文件夹下所有图片的所有71个值计算并保存在表格里,每一个图片一行 import numpy as np # from skimage.feature import greycomatrix, greycoprops # from skimage.feature import greycomatrix, greycoprops # from skimage.feature import graycomatrix, graycoprops import cv2 from skimage import io import matplotlib.pyplot as plt from skimage.feature.texture import graycomatrix, graycoprops import pywt from skimage.feature import local_binary_pattern from skimage.color import rgb2gray def extract_glcm_features(image): # 将图像转换为灰度 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 计算灰度共生矩阵,设置距离为1,角度为0度,使用4个方向(0°, 45°, 90°, 135°) glcm = graycomatrix(gray_image, distances=[1], angles=[0, np.pi / 4, np.pi / 2, 3 * np.pi / 4], symmetric=True, normed=True) # 提取GLCM特征,比如对比度、同质性、能量、相关性 contrast = graycoprops(glcm, 'contrast') homogeneity = graycoprops(glcm, 'homogeneity') energy = graycoprops(glcm, 'energy') correlation = graycoprops(glcm, 'correlation') # print(contrast,homogeneity,energy,correlation) # 返回特征向量 # glcm_features = np.hstack([contrast, homogeneity, energy, correlation]) # entropy = -np.sum(glcm * np.log2(glcm + (glcm == 0))) # correlation = skf.greycoprops(glcm, 'correlation')[0, 0] # variance = np.var(gray_image) glcm_features = np.hstack([contrast, homogeneity, energy, correlation]) return np.squeeze(glcm_features) # 提取灰度差分统计法纹理特征 def extract_gray_diff_stats(image): gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 计算水平、垂直、对角线上的灰度差分 horizontal_diff = np.diff(gray_image, axis=1) vertical_diff = np.diff(gray_image, axis=0) diagonal_diff = np.diff(gray_image[:-1, :-1], axis=1) # 计算差分统计特征 mean_horizontal = np.mean(horizontal_diff) std_horizontal = np.std(horizontal_diff) mean_vertical = np.mean(vertical_diff) std_vertical = np.std(vertical_diff) mean_diagonal = np.mean(diagonal_diff) std_diagonal = np.std(diagonal_diff) features = np.array([mean_horizontal,std_horizontal,mean_vertical,std_vertical,mean_diagonal,std_diagonal]) # features = { # 'mean_horizontal_diff': mean_horizontal, # 'std_horizontal_diff': std_horizontal, # 'mean_vertical_diff': mean_vertical, # 'std_vertical_diff': std_vertical, # 'mean_diagonal_diff': mean_diagonal, # 'std_diagonal_diff': std_diagonal # } return features # 提取一阶统计特征 def extract_first_order_stats(image): # 灰度图像 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化处理(如需要可调整阈值) _, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY) # 前景像素占比 foreground_ratio = np.sum(binary_image == 255) / binary_image.size # 灰度均值、标准差、均方根 mean_gray = np.mean(gray_image) std_gray = np.std(gray_image) rms_gray = np.sqrt(np.mean(np.square(gray_image))) # features = { # 'foreground_ratio': foreground_ratio, # 'mean_gray': mean_gray, # 'std_gray': std_gray, # 'rms_gray': rms_gray # } features = np.array([mean_gray, std_gray, rms_gray]) return features def extract_tamura_features(image): # 将图像转换为灰度 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 粗糙度(coarseness):可以基于像素值的变化来计算 coarseness = np.var(gray_image) # 方差表示粗糙度的一个近似 # 对比度(contrast):标准差 contrast = np.std(gray_image) # 方向性(directionality):可以通过梯度方向直方图来近似 gx = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=3) gy = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=3) magnitude, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True) directionality = np.histogram(angle, bins=30, range=(0, 360))[0] # 将这些特征组合成一个向量 # print(coarseness, contrast, directionality) tamura_features = np.hstack([coarseness, contrast, directionality]) # print(tamura_features) # print(coarseness.shape, contrast.shape, directionality.shape) # tamura_features = np.hstack([coarseness, contrast, directionality]) return tamura_features def extract_wavelet_features(image): # 使用小波变换分解图像 coeffs = pywt.wavedec2(image, 'bior1.3', level=1) cA, (cH, cV, cD) = coeffs[0], coeffs[1] # 提取各个子带的统计特征(均值、标准差) wavelet_features = np.array([ np.mean(cA), np.std(cA), np.mean(cH), np.std(cH), # np.mean(cV), np.std(cV), # np.mean(cD), np.std(cD) ]) return wavelet_features def extract_lbp_features(image, num_points=8, radius=1): if len(image.shape) == 3: # 如果是 RGB 图像 image = rgb2gray(image) # 转换为灰度图像 # 计算 LBP 图像 lbp_image = local_binary_pattern(image, num_points, radius, method='uniform') # 提取直方图特征 hist, _ = np.histogram(lbp_image, bins=np.arange(0, num_points + 3), range=(0, num_points + 2)) hist = hist.astype("float") hist /= (hist.sum() + 1e-7) # 归一化 return hist def extract_fourier_features(image): # 对图像进行傅里叶变换 f = np.fft.fft2(image) fshift = np.fft.fftshift(f) magnitude_spectrum = 20 * np.log(np.abs(fshift)) # 提取频域特征(均值、标准差) fourier_features = np.array([ np.mean(magnitude_spectrum), np.std(magnitude_spectrum) ]) return fourier_features # 主函数:提取所有特征 def extract_all_features(image): glcm_features = extract_glcm_features(image) # print(glcm_features.shape) diff_features = extract_gray_diff_stats(image) # print(diff_features.shape) first_features = extract_first_order_stats(image) # print(first_features.shape) tamura_features = extract_tamura_features(image) # print(tamura_features.shape) # 合并所有特征 # features = np.array([contrast,homogeneity,energy,correlation,entropy,mean_horizontal,std_horizontal,mean_vertical,std_vertical,mean_diagonal,\ # mean_gray, std_gray, rms_gray]) features_all = np.hstack([glcm_features, diff_features, first_features, tamura_features]) # all_features = {**glcm_features, **gray_diff_features, **first_order_features} return features_all def extract_all_features_V2(image): glcm_features = extract_glcm_features(image) diff_features = extract_gray_diff_stats(image) first_features = extract_first_order_stats(image) tamura_features = extract_tamura_features(image) # 新增的小波变换特征 wavelet_features = extract_wavelet_features(image) # 新增的 LBP 特征 lbp_features = extract_lbp_features(image) # 新增的傅里叶变换特征 fourier_features = extract_fourier_features(image) # 合并所有特征 features_all = np.hstack([ glcm_features, diff_features, first_features, tamura_features, wavelet_features, lbp_features ]) # features_all = np.hstack([glcm_features, diff_features, first_features, tamura_features, # wavelet_features, lbp_features, fourier_features]) return features_all # 示例用法 # 读取图像 image = cv2.imread('0/grind_2_CCD_bottom_image_1.png') print(image.shape) # "/home/liuhuaxin/surface_roughness_V2/dataset/Dataset_multimodal_V3/train/image_ccd/grind_12_CCD_bottom_image_1.png" # image = cv2.imread('image_path.jpg') features = extract_all_features_V2(image) print(features.shape) print(features) # for key, value in features.item(): # print(f'{key}: {value}')
11-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值