图像处理之USM锐化

简介: 一:基本原理图像卷积处理实现锐化有一种常用的算法叫做Unsharpen Mask方法,这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,然后再把值Scale到0~255的RGB像素值范围之内。

一:基本原理

图像卷积处理实现锐化有一种常用的算法叫做Unsharpen Mask方法,这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,然后再把值Scale到0~255的RGB像素值范围之内。基于USM锐化的方法可以去除一些细小的干扰细节和噪声,比一般直接使用卷积锐化算子得到的图像锐化结果更加真实可信。USM锐化公式表示如下:

(源图像– w*高斯模糊)/(1-w);其中w表示权重(0.1~0.9),默认为0.6

 

二:实现步骤

1.      读入图像的像素数据

2.      对图像像素数据实现高斯模糊,

3.      根据输入参数w,对图像上的每个像素点,使用USM锐化公式计算每个像素点锐化之后的像素

4.      构建一张新的输出图像,返回显示

 

三:运行效果


四:代码实现

高斯模糊代码如下:

int width = image.getWidth();
		int height = image.getHeight();
		// generateKerneal();
		generateKerneal2D();
		int radius = (int)(this.sigma*2);
		// 二维高斯模糊
		int[] pixels = new int[width*height];
		int[] outPixels = new int[width*height];
		getRGB(image, 0, 0 , width, height, pixels);
		int r=0, g=0, b=0;
		int r1=0, g1=0, b1=0;
		for(int row=0; row<height; row++) {
			int offset = row*width;
			for(int col=1; col<width-1; col++) {
				double sr=0, sg=0, sb=0; 
				// 二维高斯窗口
				for(int i=-radius; i<=radius; i++) {
					int roffset = row + i;
					if(roffset < 0) {
						roffset = 0;
					}
					if(roffset >= height) {
						roffset = height-1;
					}
					int offset1 = roffset*width;
					for(int j=-radius; j<=radius; j++) {
						int coffset = j+col;
						if(coffset < 0 ) {
							coffset = 0;
						}
						if(coffset >= width) {
							coffset = width-1;
						}
						r1 = (pixels[offset1+coffset]>>16)&0xff;
						g1 = (pixels[offset1+coffset]>>8)&0xff;
						b1 = (pixels[offset1+coffset]&0xff);
						sr += kernel2D[i+radius][j+radius]*r1;
						sg += kernel2D[i+radius][j+radius]*g1;
						sb += kernel2D[i+radius][j+radius]*b1;
						
					}
				}
				r = (int)sr;
				g = (int)sg;
				b = (int)sb;
				outPixels[offset+col]=(0xff<<24) | (r<<16) | (g << 8) | b;
			}
		}

基于高斯模糊的代码是USM锐化的代码如下:

		int width = image.getWidth();
		int height = image.getHeight();

		int[] pixels1 = new int[width*height];
		int[] pixels2 = new int[width*height];
		getRGB(image, 0, 0 , width, height, pixels1);
		
		// 高斯模糊
		BufferedImage blurImage = super.process(image);
		getRGB(blurImage, 0, 0 , width, height, pixels2);
		
		// USM 锐化
		int[] output = new int[width*height];
		int r=0, g=0, b=0;
		int r1=0, g1=0, b1=0;
		int r2=0, g2=0, b2=0;
		for(int i=0; i<pixels1.length; i++) {
			r1 = (pixels1[i] >> 16)&0xff;
			g1 = (pixels1[i] >> 8)&0xff;
			b1 = pixels1[i]&0xff;
			
			r2 = (pixels2[i] >> 16)&0xff;
			g2 = (pixels2[i] >> 8)&0xff;
			b2 = pixels2[i]&0xff;
			
			r = (int)((r1-weight*r2)/(1-weight));
			g = (int)((g1-weight*g2)/(1-weight));
			b = (int)((b1-weight*b2)/(1-weight));
			
			output[i]=(0xff<<24) | (clamp(r)<<16) | (clamp(g) << 8) | clamp(b);
		}
		
		BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		setRGB(dest, 0, 0, width, height, output);
		return dest;
其中BufferedImage blurImage = super.process(image);调用的代码为高斯模糊


目录
相关文章
|
数据采集 机器学习/深度学习 算法
|
存储 监控 Java
基于spring boot物流管理系统设计与实现
基于spring boot物流管理系统设计与实现
攻略丨1688新手上路,快速掌握店铺运营技巧!
当然,1688运营的重要环节还有很多,不仅仅局限于老范所陈列的4个方面,更多的需要1688新手关注基础指标的变化,关注商品运营,关注流量承接,关注客户留存,数据化的运营,要有具体的指标跟进,很多1688运营日常无事可干,不会操作,越做越差,刚开始做店,希望得到一个新店执行方案,自己也不知道问题在哪里,找出路而不知道路在何方,那么,改变,就从这里开始吧,加油。
攻略丨1688新手上路,快速掌握店铺运营技巧!
|
10月前
|
人工智能 自然语言处理 搜索推荐
从输入指令到代码落地:Cline AI 源码浅析
文章揭示了Cline如何将简单的自然语言指令转化为具体的编程任务,并执行相应的代码修改或生成操作。
1068 18
从输入指令到代码落地:Cline AI 源码浅析
|
10月前
|
机器学习/深度学习 人工智能 API
AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
|
编解码 中间件 API
API实现跨平台互操作性
【10月更文挑战第16天】API实现跨平台互操作性
507 2
|
监控 NoSQL Linux
linux常见的coredump原因都有哪些?
Core dump通常发生在程序遇到严重错误时,操作系统会生成core文件来记录程序崩溃时的内存、寄存器状态、栈信息等。
1310 3
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No
这篇文章介绍了在尝试安装`thop`包时遇到的"No matching distribution found"错误,并提供了通过直接从GitHub源码安装`thop`的解决方法。
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No
|
存储 供应链 安全
区块链技术防止交易被篡改的能力主要依赖于其独特的架构和机制
**区块链技术通过分布式存储、去中心化网络、哈希链接、共识机制及加密算法确保交易防篡改。每个区块含前块哈希,篡改将破坏链式结构;共识机制如PoW、PoS保证交易验证;智能合约增强安全性。多层防护保障数据完整性和安全性,支撑其在多个行业中的应用。**
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
1223 1