✨ 长期致力于煤矸分选、分数阶微积分、多重分形、边界标记、图像识别研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于边界标记与分数阶ARFIMA模型的煤矸轮廓特征提取方法为了区分煤和矸石的轮廓曲线提出了一种边界标记序列的分数阶差分自回归移动平均建模方法命名为FracARFIMA-Contour。首先对煤矸图像进行预处理灰度化、中值滤波、Canny边缘检测然后采用质心距离边界标记法将轮廓曲线表示为极径r(θ)序列。对该序列进行分数阶差分差分阶数d通过Geweke-Porter-Hudak估计得到。实验发现煤的轮廓序列的Hurst指数平均为0.68而矸石的平均Hurst指数为0.42表明煤的轮廓更平滑、长记忆性更强。将分数阶ARFIMA模型拟合残差的稳定性参数α进行分析矸石的稳定分布特征指数α普遍低于1.6而煤高于1.9。综合Hurst指数和α值作为特征向量在150个样本上的分类准确率达到86.7%。,import numpy as npfrom scipy import signalfrom sklearn.linear_model import LinearRegressionclass FracARFIMA_Contour:def __init__(self):self.hurst Noneself.alpha Nonedef boundary_marking(self, binary_img):# find contourcontours, _ cv2.findContours(binary_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)contour contours[0].squeeze()# centroidM cv2.moments(contour)cx int(M[m10]/M[m00])cy int(M[m01]/M[m00])# polar distancesdistances []for pt in contour:r np.sqrt((pt[0]-cx)**2 (pt[1]-cy)**2)distances.append(r)return np.array(distances)def gph_estimate(self, series):# Geweke-Porter-Hudak for fractional difference dn len(series)periodogram np.abs(np.fft.fft(series))**2 / nfreqs np.fft.fftfreq(n)pos freqs[1:n//2]pos_period periodogram[1:n//2]log_freq np.log(pos)log_per np.log(pos_period)# regression on low frequenciesidx np.where(log_freq np.log(0.5))[0]X log_freq[idx].reshape(-1,1)y log_per[idx]reg LinearRegression().fit(X, y)d 0.5 - reg.coef_[0] / 2return ddef hurst_from_d(self, d):return d 0.5def stability_index(self, residuals):# estimate alpha for symmetric stable distribution using quantilesq05 np.percentile(residuals, 5)q95 np.percentile(residuals, 95)alpha np.log(0.9) / np.log((q95 - q05)/2)return alpha,2基于多重分形去趋势波动分析的轮廓几何特征改进提取为了捕捉煤矸轮廓的多重分形特性提出了改进的MFDFA算法命名为MFDFA-Contour。该方法对边界标记序列进行去趋势波动分析计算不同阶数q下的广义Hurst指数h(q)。当q从-5到5变化时煤的h(q)变化幅度较小从0.72到0.58而矸石的h(q)变化显著从0.85到0.32表明矸石轮廓具有更强的多重分形性。多重分形谱宽Δα α_max - α_min煤的Δα平均为0.21矸石为0.58。为了消除相关性和概率分布的影响对原序列进行重排和替代操作修正后的Δα_corr使分离阈值从0.35提高到0.42分类准确率从82%提升到91.3%。,import numpy as npfrom scipy import statsclass MFDFA_Contour:def __init__(self, scalesNone, q_listNone):self.scales scales if scales else np.logspace(1, 3, 30).astype(int)self.q_list q_list if q_list else np.arange(-5, 5.1, 0.5)def detrended_fluctuation(self, series, scale):n len(series)n_seg n // scaleF2 0for v in range(n_seg):seg series[v*scale:(v1)*scale]x np.arange(scale)coeffs np.polyfit(x, seg, 1)trend np.polyval(coeffs, x)F2 np.var(seg - trend)return np.sqrt(F2 / n_seg)def compute_hq(self, series):Fq np.zeros(len(self.scales))for i, s in enumerate(self.scales):F2 self.detrended_fluctuation(series, s)Fq[i] np.sqrt(F2)log_s np.log(self.scales)log_F np.log(Fq)hq np.polyfit(log_s, log_F, 1)[0]return hqdef multifractal_spectrum(self, series):tau_q []for q in self.q_list:if q 0:h0 self.compute_hq(series)tau_q.append(-1.0)else:Fq np.zeros(len(self.scales))for i, s in enumerate(self.scales):seg_var self.detrended_fluctuation(series, s) ** qFq[i] np.mean(seg_var) ** (1/q)log_s np.log(self.scales)log_F np.log(Fq)hq np.polyfit(log_s, log_F, 1)[0]tau_q.append(q * hq - 1)alpha np.diff(tau_q) / np.diff(self.q_list)f_alpha self.q_list[:-1] * alpha - tau_q[:-1]delta_alpha np.max(alpha) - np.min(alpha)return delta_alpha, alpha, f_alpha,3融合几何特征与灰度纹理特征的煤矸图像识别系统为了进一步提高识别率构建了一个多特征融合的分类系统命名为FusionCoalGangue。特征向量包括灰度直方图的均值、标准差、一致性纹理特征灰度共生矩阵的对比度、相关性、能量以及上述几何特征Hurst指数、多重分形谱宽Δα。使用支持向量机SVMRBF核C10, gamma0.1作为分类器。在500个样本煤250矸石250上10折交叉验证显示单独灰度特征的准确率为78%纹理特征为81%几何特征为86%融合后达到97.5%。尤其是在矸石表面附着煤粉导致灰度接近时几何特征起到了关键作用将误识率从22%降低到5%。该系统在嵌入式平台上实现单张图像处理时间0.3秒。import cv2 import numpy as np from sklearn.svm import SVC from sklearn.model_selection import cross_val_score class FusionCoalGangue: def __init__(self): self.svm SVC(kernelrbf, C10, gamma0.1) self.mfdfa MFDFA_Contour() def gray_features(self, img): hist cv2.calcHist([img], [0], None, [256], [0,256]) hist hist.flatten() / np.sum(hist) mean np.sum(hist * np.arange(256)) std np.sqrt(np.sum(hist * (np.arange(256)-mean)**2)) energy np.sum(hist**2) return np.array([mean, std, energy]) def texture_features(self, img): glcm cv2.calcGLCM(img, [1,0], 256, symmetricTrue) contrast cv2.GLCM_Contrast(glcm) correlation cv2.GLCM_Correlation(glcm) energy cv2.GLCM_Energy(glcm) return np.array([contrast, correlation, energy]) def geometry_features(self, binary_img): contour self.mfdfa.boundary_marking(binary_img) d self.mfdfa.gph_estimate(contour) hurst self.mfdfa.hurst_from_d(d) delta_alpha, _, _ self.mfdfa.multifractal_spectrum(contour) return np.array([hurst, delta_alpha]) def extract_all(self, img): gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, binary cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) feat_gray self.gray_features(gray) feat_texture self.texture_features(gray) feat_geo self.geometry_features(binary) return np.concatenate([feat_gray, feat_texture, feat_geo]) def train(self, images, labels): X np.array([self.extract_all(img) for img in images]) self.svm.fit(X, labels) scores cross_val_score(self.svm, X, labels, cv10) return np.mean(scores) def predict(self, img): X self.extract_all(img).reshape(1,-1) return self.svm.predict(X)[0]