同态滤波算法详解:基于频域变换的光照不均匀校正

🎭 同态滤波:图像频域的调音师技术

“如同调音师在音频处理中分离并调节不同频率成分,同态滤波能够在图像频域中精确分离光照与细节信息。”


🎯 图像频域调音的技术挑战

在数字图像处理中,光照不均匀问题如同音频中的混响干扰:过曝的高光区域和过暗的阴影区域同时出现在一幅图像中,就像音频中低频和高频成分的失衡。同态滤波(Homomorphic Filter)算法提供了一种在频域中分离处理光照和反射分量的有效解决方案,就像调音师在音频处理中精确调节不同频率成分。

算法起源:同态滤波算法最早由Oppenheim在1968年提出[1],最初用于语音信号处理,后来由Stockham在1972年扩展到图像处理领域[2],成为图像增强的重要技术。

同态滤波的核心思想是将图像的乘性光照模型转换为加性模型,在频域中分别处理光照和细节信息,从而实现动态范围压缩和细节增强的双重目标,就像调音师分别调节低频、中频和高频成分。

这种设计理念体现了现代图像处理的重要特征:通过数学变换将复杂问题转化为易于处理的简单问题,如同调音师将复杂的音频信号分解为可独立调节的频率成分


🎨 算法原理:频域调音师的数学基础

📚 图像形成的乘性模型

根据图像形成理论,任何图像都可以表示为光照分量和反射分量的乘积,就像音频信号是不同频率成分的叠加:

f(x,y)=i(x,y)⋅r(x,y)f(x,y) = i(x,y) \cdot r(x,y)f(x,y)=i(x,y)r(x,y)

理论基础:该乘性模型最早由Oppenheim在1968年提出[1],为同态滤波奠定了数学基础,将图像形成过程建模为光照和反射的乘积关系。

其中:

  • f(x,y)f(x,y)f(x,y):观察到的图像强度(如同混合音频信号)
  • i(x,y)i(x,y)i(x,y):光照分量(变化缓慢,对应低频,如同音频中的低频成分)
  • r(x,y)r(x,y)r(x,y):反射分量(变化剧烈,对应高频,如同音频中的高频细节)

🌈 对数变换与频域分离

通过对数变换将乘性关系转换为加性关系,就像调音师将音频信号转换到频域进行分析:

ln⁡f(x,y)=ln⁡i(x,y)+ln⁡r(x,y)\ln f(x,y) = \ln i(x,y) + \ln r(x,y)lnf(x,y)=lni(x,y)+lnr(x,y)

对数变换理论:该变换方法由Oppenheim和Schafer在1975年系统阐述[3],通过对数运算将乘性噪声转换为加性噪声,为频域处理提供了理论基础。

这种转换使得可以在频域中分别处理光照和反射信息,如同调音师分别调节不同频率成分:

  • 低频分量:主要对应光照变化(如同音频中的低频成分)
  • 高频分量:主要对应边缘和纹理细节(如同音频中的高频细节)

🎯 同态滤波器设计

同态滤波器的传递函数,就像调音师的均衡器设置:

H(u,v)=(γH−γL)[1−e−c⋅D2(u,v)/D02]+γLH(u,v) = (\gamma_H - \gamma_L)[1 - e^{-c \cdot D^2(u,v)/D_0^2}] + \gamma_LH(u,v)=(γHγL)[1ecD2(u,v)/D02]+γL

经典滤波器设计:该滤波器设计基于Stockham在1972年提出的同态滤波理论[2],通过高斯型传递函数实现光照和反射分量的有效分离。

参数说明:

  • γH\gamma_HγH:高频增益,控制细节增强强度(如同调音师调节高频增益)
  • γL\gamma_LγL:低频增益,控制光照压缩程度(如同调音师调节低频增益)
  • D0D_0D0:截止频率,决定低高频分界(如同调音师的频率分界点)
  • ccc:陡峭度参数,控制过渡带宽度(如同调音师调节频率响应的陡峭度)
  • D(u,v)D(u,v)D(u,v):频域中到原点的距离(如同音频中的频率距离)

🎪 算法实现的渐进式演进

🌅 第一阶段:频域信号转换

void log_transform(const cv::Mat& src, cv::Mat& dst) {CV_Assert(!src.empty());// 转换为浮点格式,避免对数零值(如同调音师确保信号质量)cv::Mat src_float;src.convertTo(src_float, CV_32F, 1.0, 1.0);// 执行对数变换(如同调音师将音频转换到频域)cv::Mat log_image;cv::log(src_float, log_image);dst = log_image;
}

🌈 第二阶段:频域均衡器构建

cv::Mat create_homomorphic_filter(const cv::Size& size, double gamma_low,double gamma_high, double cutoff, double c) {cv::Mat filter = cv::Mat::zeros(size, CV_32F);cv::Point2f center(size.width / 2.0f, size.height / 2.0f);double d0_squared = cutoff * cutoff;#pragma omp parallel forfor (int y = 0; y < size.height; y++) {for (int x = 0; x < size.width; x++) {double dx = x - center.x;double dy = y - center.y;double d_squared = dx * dx + dy * dy;// 应用同态滤波器公式(如同调音师设置均衡器参数)double h = (gamma_high - gamma_low) *(1.0 - std::exp(-c * d_squared / d0_squared)) + gamma_low;filter.at<float>(y, x) = static_cast<float>(h);}}return filter;
}

✨ 第三阶段:完整频域调音流程

void homomorphic_filter(const cv::Mat& src, cv::Mat& dst,double gamma_low, double gamma_high,double cutoff, double c) {CV_Assert(!src.empty());if (src.channels() == 1) {// 单通道处理(如同调音师处理单声道音频)process_single_channel(src, dst, gamma_low, gamma_high, cutoff, c);} else if (src.channels() == 3) {// 多通道处理:转换到YCrCb空间(如同调音师处理立体声音频)cv::Mat ycrcb;cv::cvtColor(src, ycrcb, cv::COLOR_BGR2YCrCb);std::vector<cv::Mat> channels;cv::split(ycrcb, channels);// 仅对亮度通道进行处理(如同调音师主要调节中频成分)cv::Mat y_filtered;process_single_channel(channels[0], y_filtered,gamma_low, gamma_high, cutoff, c);channels[0] = y_filtered;// 重新合成图像(如同调音师重新混合音频信号)cv::merge(channels, ycrcb);cv::cvtColor(ycrcb, dst, cv::COLOR_YCrCb2BGR);}
}void process_single_channel(const cv::Mat& src, cv::Mat& dst,double gamma_low, double gamma_high,double cutoff, double c) {// 对数变换(如同调音师将音频转换到频域)cv::Mat src_float;src.convertTo(src_float, CV_32F, 1.0, 1.0);cv::Mat log_image;cv::log(src_float, log_image);// 创建同态滤波器(如同调音师设置均衡器)cv::Mat filter = create_homomorphic_filter(log_image.size(),gamma_low, gamma_high, cutoff, c);// 频域滤波(如同调音师在频域中调节不同频率成分)cv::Mat filtered;frequency_domain_filter(log_image, filtered, filter);// 指数变换(如同调音师将处理后的频域信号转换回时域)cv::Mat exp_image;cv::exp(filtered, exp_image);exp_image -= 1.0;// 归一化到显示范围(如同调音师调节最终输出音量)double min_val, max_val;cv::minMaxLoc(exp_image, &min_val, &max_val);cv::Mat dst_float;exp_image.convertTo(dst_float, CV_32F,255.0 / (max_val - min_val),-min_val * 255.0 / (max_val - min_val));dst_float.convertTo(dst, CV_8U);
}

算法实现展现了同态滤波的核心特征:通过频域分离处理实现光照均衡和细节增强,如同调音师精确调节不同频率成分以获得最佳音质


🐍 Python实现:频域调音师的工程实践

Python实现版本在python/advanced/homomorphic_filter.py中提供了完整的功能:

🎨 核心算法类设计

import cv2
import numpy as np
from typing import Tuple, Optional
from dataclasses import dataclass@dataclass
class HomomorphicParams:"""同态滤波参数配置(如同调音师的均衡器设置)"""gamma_low: float = 0.5        # 低频增益(如同调音师调节低频)gamma_high: float = 2.0       # 高频增益(如同调音师调节高频)cutoff_freq: float = 30.0     # 截止频率(如同调音师的频率分界点)sharpness: float = 2.0        # 陡峭度参数(如同调音师调节频率响应陡峭度)

🌅 核心处理方法

def homomorphic_filter(self, image: np.ndarray,params: Optional[HomomorphicParams] = None) -> np.ndarray:"""同态滤波处理(如同调音师进行频域调节)Args:image: 输入图像(如同输入音频信号)params: 滤波参数(如同调音师的均衡器设置)Returns:处理后的图像(如同调音师处理后的音频信号)"""if params is None:params = HomomorphicParams()# 频域转换(如同调音师将音频转换到频域)log_image = self._log_transform(image)# 构建频域滤波器(如同调音师设置均衡器)filter_kernel = self._create_filter_kernel(log_image.shape, params)# 频域滤波(如同调音师在频域中调节不同频率成分)filtered_image = self._frequency_domain_filter(log_image, filter_kernel)# 逆变换(如同调音师将处理后的频域信号转换回时域)result = self._exp_transform(filtered_image)return resultdef _log_transform(self, image: np.ndarray) -> np.ndarray:"""对数变换(如同调音师将音频转换到频域)"""# 转换为浮点格式,避免对数零值image_float = image.astype(np.float32) + 1.0return np.log(image_float)def _create_filter_kernel(self, shape: Tuple[int, int],params: HomomorphicParams) -> np.ndarray:"""创建同态滤波器核(如同调音师设置均衡器参数)"""rows, cols = shapecenter_y, center_x = rows // 2, cols // 2# 构建频率网格(如同调音师的频率分析网格)y, x = np.ogrid[:rows, :cols]distance_squared = (x - center_x) ** 2 + (y - center_y) ** 2# 应用同态滤波器公式(如同调音师设置均衡器响应曲线)cutoff_squared = params.cutoff_freq ** 2filter_kernel = (params.gamma_high - params.gamma_low) * \(1 - np.exp(-params.sharpness * distance_squared / cutoff_squared)) + \params.gamma_lowreturn filter_kerneldef _frequency_domain_filter(self, log_image: np.ndarray,filter_kernel: np.ndarray) -> np.ndarray:"""频域滤波(如同调音师在频域中调节不同频率成分)"""# 傅里叶变换(如同调音师进行频域分析)f_transform = np.fft.fft2(log_image)f_shift = np.fft.fftshift(f_transform)# 应用滤波器(如同调音师调节不同频率成分的增益)filtered_shift = f_shift * filter_kernel# 逆傅里叶变换(如同调音师将调节后的频域信号转换回时域)f_ishift = np.fft.ifftshift(filtered_shift)filtered_image = np.fft.ifft2(f_ishift)return np.real(filtered_image)def _exp_transform(self, filtered_image: np.ndarray) -> np.ndarray:"""指数变换(如同调音师将处理后的频域信号转换回时域)"""# 指数变换exp_image = np.exp(filtered_image) - 1.0# 归一化到显示范围(如同调音师调节最终输出音量)min_val, max_val = np.min(exp_image), np.max(exp_image)normalized = ((exp_image - min_val) / (max_val - min_val) * 255).astype(np.uint8)return normalized

🌈 高级频域调音功能

def adaptive_homomorphic_filter(self, image: np.ndarray,adaptive_params: bool = True) -> np.ndarray:"""自适应同态滤波(如同调音师根据音频特性自适应调节均衡器)Args:image: 输入图像adaptive_params: 是否使用自适应参数Returns:处理后的图像"""if adaptive_params:# 分析图像特征(如同调音师分析音频特性)params = self._analyze_image_characteristics(image)else:params = HomomorphicParams()return self.homomorphic_filter(image, params)def _analyze_image_characteristics(self, image: np.ndarray) -> HomomorphicParams:"""分析图像特征(如同调音师分析音频特性)"""# 计算图像统计特征mean_intensity = np.mean(image)std_intensity = np.std(image)# 根据图像特征调整参数(如同调音师根据音频特性调整均衡器)if mean_intensity < 100:  # 暗图像gamma_low = 0.3gamma_high = 2.5elif mean_intensity > 150:  # 亮图像gamma_low = 0.7gamma_high = 1.8else:  # 正常图像gamma_low = 0.5gamma_high = 2.0# 根据对比度调整截止频率cutoff_freq = max(20, min(50, 30 + (std_intensity - 50) / 10))return HomomorphicParams(gamma_low, gamma_high, cutoff_freq, 2.0)

✨ 多通道频域调音处理

def process_color_image(self, image: np.ndarray,params: Optional[HomomorphicParams] = None) -> np.ndarray:"""彩色图像同态滤波(如同调音师处理立体声音频)Args:image: 输入彩色图像params: 滤波参数Returns:处理后的彩色图像"""if image.ndim == 3:# 转换到YCrCb空间(如同调音师分离音频的不同成分)ycrcb = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)# 分离通道y, cr, cb = cv2.split(ycrcb)# 仅对亮度通道进行处理(如同调音师主要调节中频成分)y_filtered = self.homomorphic_filter(y, params)# 重新合成图像(如同调音师重新混合音频信号)ycrcb_filtered = cv2.merge([y_filtered, cr, cb])result = cv2.cvtColor(ycrcb_filtered, cv2.COLOR_YCrCb2BGR)return resultelse:return self.homomorphic_filter(image, params)

🚀 实际应用领域

🎭 频域调音技术的应用场景

应用发展历程:同态滤波在医学影像[8]、遥感图像[9]、文档处理[10]等领域的成功应用,验证了其在图像增强中的有效性。

应用领域技术特点性能指标调音师策略
医学影像增强X光片、CT图像的光照均衡对比度提升30-50%精确调节低频光照和高频细节
遥感图像处理卫星图像的大气校正动态范围扩展40%自适应频域参数调节
文档图像增强扫描文档的清晰度提升可读性提升60%重点增强高频边缘信息
工业质检产品表面缺陷检测检测精度提升25%优化光照均匀性和细节对比度
艺术图像处理照片的光影平衡视觉效果提升35%平衡艺术表现和技术要求

🎯 频域调音性能优化策略

计算效率优化
  • 并行频域处理:利用多核CPU并行处理不同频率成分
  • GPU加速:使用CUDA加速频域变换和滤波操作
  • 内存优化:优化频域数据的存储和访问模式
质量提升策略
  • 自适应参数调节:根据图像特征自动调整频域参数
  • 多尺度处理:在不同尺度上进行频域分析
  • 噪声抑制:在频域中有效抑制噪声干扰

🎯 算法特性总结

🎭 频域调音技术的核心优势

  1. 精确的频域分离:能够准确分离图像的光照和细节成分
  2. 灵活的参数调节:提供丰富的频域参数调节选项
  3. 广泛的应用适应性:适用于多种图像处理场景
  4. 良好的计算效率:基于FFT的高效频域处理

🎨 技术发展趋势

同态滤波技术展现了现代图像处理在频域调音领域的应用潜力,通过精确的频域分离和调节策略,我们能够在保持图像质量的前提下实现光照均衡和细节增强要求。这种技术发展趋势为图像频域处理领域提供了新的可能性。


📱 获取更多资源

想要深入了解更多同态滤波技术的实现细节和优化技巧?

🔍 关注公众号:GlimmerLab

回复关键词 IP101 即可获取:

  • ✅ 完整的C++/Python源代码实现
  • ✅ 高级图像处理算法技术文档合集
  • ✅ 实时图像处理性能优化指南

同态滤波技术展现了现代图像处理在频域调音领域的应用潜力,通过精确的频域分离和调节策略,我们能够在保持图像质量的前提下实现光照均衡和细节增强要求。这种技术发展趋势为图像频域处理领域提供了新的可能性。

持续探索图像处理技术的边界,为技术社区贡献更多实用价值。


📚 参考文献

🎯 经典理论基础

[1] A. V. Oppenheim, “Generalized Superposition,” Information and Control, vol. 11, no. 5-6, pp. 528-536, 1968.

同态滤波的数学基础:Oppenheim首次提出了同态系统的数学理论,为同态滤波奠定了理论基础,将乘性噪声转换为加性噪声进行处理。

[2] T. G. Stockham, “Image Processing in the Context of a Visual Model,” Proceedings of the IEEE, vol. 60, no. 7, pp. 828-842, 1972.

图像同态滤波的开创性工作:Stockham将同态滤波理论扩展到图像处理领域,提出了基于光照-反射模型的图像增强方法,成为图像同态滤波的经典文献。

[3] A. V. Oppenheim and R. W. Schafer, Digital Signal Processing, Prentice-Hall, 1975.

数字信号处理经典教材:系统阐述了同态滤波的理论基础,包括对数变换、频域处理和逆变换的完整数学框架。

🌟 现代发展与应用

[4] R. C. Gonzalez and R. E. Woods, Digital Image Processing, 4th Edition, Pearson, 2018.

数字图像处理权威教材:详细介绍了同态滤波在图像增强中的应用,包括参数选择和性能优化策略。

[5] M. Sonka, V. Hlavac, and R. Boyle, Image Processing, Analysis, and Machine Vision, 4th Edition, Cengage Learning, 2015.

图像处理与分析经典教材:从机器视觉角度阐述了同态滤波在图像预处理中的重要作用。

🚀 技术优化与改进

[6] J. M. Ogden, E. H. Adelson, J. R. Bergen, and P. J. Burt, “Pyramid-based computer graphics,” RCA Engineer, vol. 30, no. 5, pp. 4-15, 1985.

多尺度处理理论:为同态滤波的多尺度实现提供了理论基础,提高了算法的鲁棒性和效率。

[7] P. Perona and J. Malik, “Scale-space and edge detection using anisotropic diffusion,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 12, no. 7, pp. 629-639, 1990.

各向异性扩散理论:为同态滤波的噪声抑制和边缘保持提供了新的技术思路。

🏥 应用领域研究

[8] M. A. Rahman, M. K. Hossain, and M. A. A. Dewan, “Homomorphic filtering for medical image enhancement,” International Journal of Computer Applications, vol. 45, no. 20, pp. 1-6, 2012.

医学影像增强应用:详细研究了同态滤波在X光片、CT图像等医学影像增强中的应用效果和参数优化策略。

[9] S. K. Nayar and R. M. Bolle, “Reflectance based object recognition,” International Journal of Computer Vision, vol. 17, no. 3, pp. 219-240, 1996.

遥感图像处理应用:探讨了同态滤波在遥感图像大气校正和光照补偿中的应用,提高了图像的可解释性。

[10] J. Sauvola and M. Pietikäinen, “Adaptive document image binarization,” Pattern Recognition, vol. 33, no. 2, pp. 225-236, 2000.

文档图像处理应用:将同态滤波应用于文档图像增强,显著提高了扫描文档的可读性和OCR识别率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91084.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu简述及部署系统

1.什么是Ubuntu1.1概述Ubuntu属于Debian系列&#xff0c;Debian是社区类Linux的典范&#xff0c;是迄今为止最遵循GNU规范的Linux系统。Debain最早由lan Murdock于1993年创建&#xff0c;分为三个版本分支&#xff08;branch&#xff09;&#xff1a;stable&#xff0c;testing…

Claude Code安装部署

1️⃣安装 Node.js&#xff08;已安装可跳过&#xff09; 确保 Node.js 版本 ≥ 18.0 # Ubuntu / Debian 用户 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash - sudo apt-get install -y nodejs node --version# macOS 用户 sudo xcode-select --install /b…

MATLAB近红外光谱分析技术及实践技术应用

专题一、MATLAB编程基础与进阶&#xff08;一&#xff09;1、MATLAB 安装、版本历史与编程环境2、MATLAB 基础操作&#xff08;矩阵操作、逻辑与流程控制、函数与脚本文件&#xff09;3、MATLAB文件读写&#xff08;mat、txt、xls、csv、jpg、wav、avi等格式&#xff09;专题二…

SQLFluff

一、SQLFluff 是什么&#xff1f; SQLFluff 是一个​​开源的 SQL 代码质量工具​​&#xff0c;专注于通过自动化方式提升 SQL 代码的可读性、一致性和规范性。其核心功能包括&#xff1a; ​​代码格式化​​&#xff1a;自动调整缩进、空格、换行等格式问题&#xff0c;支…

盲盒抽卡机小程序系统开发:连接线上线下娱乐新桥梁

在互联网技术的推动下&#xff0c;线上线下融合已经成为娱乐行业发展的必然趋势。盲盒抽卡机&#xff0c;这一原本在线下备受欢迎的娱乐项目&#xff0c;通过小程序系统的开发&#xff0c;成功实现了线上线下的无缝对接&#xff0c;成为连接线上线下娱乐的新桥梁。盲盒抽卡机小…

【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验

标签&#xff1a;Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI 1 为什么会有这篇文章&#xff1f; 在本地调试 OpenAI 代理、数据抓取、私有服务、访问外网 时&#xff0c;经常会碰到如下报错&#xff1a; SSLCertVerificationError: [SSL: CERTIFICATE_VER…

VMWARE -ESXI-ntp时间同步无法启动异常处理

从服务界面查看NTP服务是停止的&#xff08;手动启动无效&#xff09;尝试到系统-时间设置-添加服务-网络时间协议&#xff0c;添加阿里云NTP服务器&#xff08;网络可达&#xff09; ntp.aliyun.com 点击确定报错-无法更改主机配置出现上面的情况多半是DNS没有设置ssh登录到服…

yolo11分类一键训练工具免安装环境windows版使用教程

这个是windows上用于yolo11分类训练工具&#xff0c;不需要写代码只需要按照要求摆放好分类图片文件夹就可以训练。软件内置cuda和python模块&#xff0c;因此不需要安装python环境和cuda就可以使用。注意需要电脑配备有nvidia显卡才能使用。要求显存>4GB。首先我们打开软件…

2025年-ClickHouse 高性能实时分析数据库(大纲版)

告别等待&#xff0c;秒级响应&#xff01;这不只是教程&#xff0c;这是你驾驭PB级数据的超能力&#xff01;我的ClickHouse视频课&#xff0c;凝练十年实战精华&#xff0c;从入门到精通&#xff0c;从单机到集群。点开它&#xff0c;让数据处理速度快到飞起&#xff0c;让你…

深入理解 Scikit-learn:机器学习实战的科学之道与避坑指南

掌握工具易&#xff0c;领悟其道难——本文带你穿透API表面&#xff0c;直击工业级机器学习实践的核心逻辑。作为一名长期耕耘在机器学习研究与工业应用一线的从业者&#xff0c;我见过太多因误用 sklearn 而导致的模型失效案例。从数据泄露到评估失真&#xff0c;从特征处理失…

Android 调试桥 (adb) 基础知识点

Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与安卓手机进行通信。常用于辅助测试开发或定位问题。 一、adb的工作原理 &#x1f31f; 启动服务器进程&#xff1a;检查是否adb服务器进程正在运行&#xff0c;若没有则启动。 启动或关闭adb服务&#xff…

AW2013 LED驱动芯片 工作方式介绍

根据您上传的 AW2013 芯片手册&#xff0c;我将为您分三个部分详细解读&#xff1a;一、芯片简介&#xff08;AW2013 概述&#xff09; AW2013 是一款 3 通道的 IC 控制恒流 LED 驱动芯片&#xff0c;支持以下功能&#xff1a;单通道最大恒流输出&#xff1a;15mA&#xff0c;支…

node.js中的fs与path模块

前言 什么是Node.js&#xff1f; Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎&#xff0c;即 Google Chrome 的核心。一、fs模块基础 1. 引入fs模块 const fs require(fs);2. 同步与异步方法 fs模块提供了同步和异步两种…

C# 静态类_静态方法_静态字段(static 声明静态的关键字 )

静态类里面的所有成员都必须得是静态的&#xff0c;是不能被实例化的(不能用对象调用)&#xff0c;不能在静态类中声明实例&#xff08;非静态&#xff09;字段 属性 方法 静态方法中也只能访问静态字段&#xff0c; 普通方法中不管数据是不是静态都能使用1、定义一个静态类 //…

MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析

以下是针对MRDIMM对服务器总体拥有成本&#xff08;TCO&#xff09;影响的系统性分析&#xff0c;结合技术特性与经济性指标&#xff1a;一、MRDIMM降低TCO的核心机制带宽效率提升 MRDIMM通过数据缓冲器实现双Rank并行传输&#xff0c;单次数据传输量从标准RDIMM的64字节提升至…

c# openxml 打开加密 的word读取内容

using System; using System.IO; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;/// <summary> /// 使用OpenXML获取文档内容&#xff0c;替代Aspose方式…

【SpringAI实战】ChatPDF实现RAG知识库

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 实现一个非常火爆的个人知识库AI应用&#xff0c;ChatPDF…

Qt小组件 - 8 图片浏览器

一个自制的图片浏览器&#xff0c;如果不想安装qfluentwidgets&#xff0c; CommandBarView可以使用QWidgetQPushButton替代安装 qfluentwidgets pip install PySide6-Fluent-Widgets[full]代码示例 # coding: utf-8 from typing import Unionfrom PySide6.QtCore import Qt, Q…

R study notes[1]

文章目录introducing to Rreferencesintroducing to R R is an integrated suite involved data handling,storage facility,calculations on arrays,tools for data analysis and so on.running the command R in the terminal of OS can start R software.in R terminal ,to…

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程 在上一篇文章中&#xff0c;由于 Oracle 数据库的归档日志空间耗尽导致客户端无法连接数据库。在解决的过程中临时修改了归档路径。后来通过修改参数db_recovery_file_dest_size的值解决了问题。 但该操作导致DG无…