java实现图像处理高通滤波,图像处理入门——滤波 - leo_de_macondo的个人页面 - OSCHINA - 中文开源技术交流社区...

f6a6b64994fd9e5e73e5d457163c260b.png

模糊

图像模糊的方法可以将每个像素的rgb值用周围像素的加权平均值来代替。比如用周围的9个像素来计算加权平均值,权值可以用一个3x3的矩阵来表示:

| 1   2   1 |

| 2   4   2 |   *  (1/16)

| 1   2   1 |

中间的像素是要处理的像素,越靠近中间权值越大;所有权值的和为1。用平均值代替原像素的rgb值之后,每个像素于周围像素的差异程度变小了;该矩阵相当于一个二维的低通滤波器。下面是c#的代码

public Bitmap FilterBitmap(Bitmap bmp)

{

// 创建如下3x3矩阵:

// | 1 2 1 |

// (1/16) * | 2 4 2 |

// | 1 2 1 |

double[,] core = new double[,] { { 1, 2, 1 }, { 2, 4, 2 }, { 1, 2, 1 } };

int scale = 16;

for (int i = 0; i < 3; i++)

for (int j = 0; j < 3; j++)

core[i, j] /= scale;

Bitmap retBmp = new Bitmap(bmp.Width, bmp.Height);

double r, g, b;

int width = bmp.Width - 1;

int height = bmp.Height - 1;

// 循环处理第2行开始到倒数第2行;第2列开始到倒数第2列的像素,

// 因为第最外面一圈的像素周围没有8个像素

for (int y = 1; y < height; y++)

{

for (int x = 1; x < width; x++)

{

// 将周围8个像素的rgb加权平均值作为被处理像素的值

r = g = b = 0;

for (int j = -1; j <= 1; j++)

{

for (int i = -1; i <= 1; i++)

{

Color pix = bmp.GetPixel(x + i, y + j);

r += core[i + 1, j + 1] * pix.R;

g += core[i + 1, j + 1] * pix.G;

b += core[i + 1, j + 1] * pix.B;

}

}

// 确保rgb的值在0到255

if (r < 0) r = 0; if (r > 255) r = 255;

if (b < 0) b = 0; if (b > 255) b = 255;

if (g < 0) g = 0; if (g > 255) g = 255;

retBmp.SetPixel(x, y, Color.FromArgb((int)r, (int)g, (int)b));

}

}

return retBmp;

}

动态模糊或径向模糊等处理方法也是用加权平均值代替原像素的值,只是用于计算平均值的像素是一条曲线或射线上的像素而不是周围一圈的像素。

锐化

相对于模糊,锐化可以让图像看似更加清晰。方法是把每一个像素与周围像素的差异放大。同样可以用一个3x3矩阵来表示周围9个像素的权值,权值相加为1;与用于模糊的矩阵不同的是,用于锐化的矩阵中间像素的权值是正的,而周围的权值是负的。以下面的矩阵为例

| 0   –1    0 |

| –1   5   -1 |

| 0   –1    0 |

中间像素的rgb值先增大5倍,再与周围4个像素的rgb值做差,即:该像素 +(该像素-上面像素)+(该像素-下面像素)+(该像素-左边像素)+(该像素-右边像素)。结果是,如果周围像素相对该像素较暗,则差值为正,使得该像素更亮;反之如果周围像素相对较亮,则使得该像素更暗。该矩阵具有动态增加对比度的效果,相当于一个高通滤波器,

浮雕效果

浮雕效果与锐化的方法相似,稍不同的是矩阵中的权值相加为0,比如把上面矩阵中间的5改成4,用该像素与周围像素的差值代替该像素:

| 0    –1    0 |

| –1    4   -1 |

| 0    –1    0 |

不过一般的浮雕效果是有光照方向感的,比如东南方向(只与东南方向的像素对比):

| 0     0    0 |

| 0    2   -1 |

| 0   –1    0 |

效果是,如果该像素与周围相同,则该像素rgb的值变成0;如果该像素比周围像素亮,则差值为正;否则差值为负。但因为rgb的值只能是0~255,所以要把处理后的rgb值加上一个正的偏移量。

public Bitmap FilterBitmap(Bitmap bmp)

{

// 创建如下3x3矩阵:

// | 0 0 0 |

// | 0 2 -1 |

// | 0 -1 0 |

int[,] core = new int[,] { { 0, 0, 0 }, { 0, 2, -1 }, { 0, -1, 0 } };

// 偏移量

int offset = 100;

Bitmap retBmp = new Bitmap(bmp.Width, bmp.Height);

int width = bmp.Width - 1;

int height = bmp.Height - 1;

int r, g, b;

for (int y = 1; y < height; y++)

{

for (int x = 1; x < width; x++)

{

r = g = b = 0;

for (int j = -1; j <= 1; j++)

{

for (int i = -1; i <= 1; i++)

{

Color pix = bmp.GetPixel(x + i, y + j);

r += core[i + 1, j + 1] * pix.R;

g += core[i + 1, j + 1] * pix.G;

b += core[i + 1, j + 1] * pix.B;

}

}

// 加上偏移量

r += offset;

g += offset;

b += offset;

if (r < 0) r = 0; if (r > 255) r = 255;

if (g < 0) g = 0; if (g > 255) g = 255;

if (b < 0) b = 0; if (b > 255) b = 255;

retBmp.SetPixel(x, y, Color.FromArgb(r, g, b));

}

}

return retBmp;

}

锐化与浮雕处理可以应用于图像的边缘检测

以上主要参考《图像编程精髓——从开发自己的Photoshop开始》

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

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

相关文章

java激光图,java-OpenCV Android跟踪激光点

我正在尝试在Android设备上使用OpenCV跟踪激光点.我想使用此激光点在我的cameraview上的画布上绘制.我已经将我的camerapreview转换为HSV色彩空间,并使用阈值过滤(仅在H和V通道上)来分离我的Laserdot.这相当健壮.public Mat onCameraFrame(CvCameraViewFrame cvf) {// Grab the…

matlab数据接口技术,matlab接口技术与应用

matlab接口技术与应用来源&#xff1a;mamingkeda作者&#xff1a;华仔浏览&#xff1a;1070时间&#xff1a;2016-08-10 14:18标签&#xff1a;摘要&#xff1a;matlab接口技术与应用应用程序接口的使用方法。全书分为10章&#xff0c;第1章是matlab环境和编程语言的概述&…

php iframe 上传文件,php+iframe 实现上传文件功能示例

本文实例讲述了phpiframe 实现上传文件功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我们通过动态的创建iframe&#xff0c;修改form的target&#xff0c;来实现无跳转的文件上传。具体的实现步骤1.捕捉表单提交事件2.创建一个iframe3.修改表单的target,指向ifr…

break是python合法标识符,Python笔记——break的注意事项

ajax状态ajax的几个状态 Uninitialized 初始化状态.XMLHttpRequest 对象已创建或已被 abort() 方法重置. Open open() 方法已调用,但是 send() 方法未调 ...使用Npoi向Excel中插入图片先把数据库中的数据都导入到Excel表格中,把图片地址的路径全部转成绝对路径. 使用Npoi读取刚…

bulk Java提交数据,性能优化 – bulk提交 - ELK Stack 中文指南

在 CRUD 章节&#xff0c;我们已经知道 ES 的数据写入是如何操作的了。喜欢自己动手的读者可能已经迫不及待的自己写了程序开始往 ES 里写数据做测试。这时候大家会发现&#xff1a;程序的运行速度非常一般&#xff0c;即使 ES 服务运行在本机&#xff0c;一秒钟大概也就能写入…

catalog java,Java Connection getCatalog()方法与示例

通常&#xff0c;目录是一个目录&#xff0c;其中包含有关数据集&#xff0c;文件或数据库的信息。而数据库目录中包含所有数据库&#xff0c;基本表&#xff0c;视图(虚拟表)&#xff0c;同义词&#xff0c;值范围&#xff0c;索引&#xff0c;用户和用户组的列表。Connection…

matlab 函数 命名参数,如何处理MATLAB中的函数参数的名称/值对

我喜欢使用结构为我的选择。这给你一个简单的方法来存储选项和一个简单的方法来定义它们。此外&#xff0c;整个事情变得相当紧凑。function example(varargin)%# define defaults at the beginning of the code so that you do not need to%# scroll way down in case you wan…

ssrf 过滤.php,SSRF技巧之如何绕过filter_var( )

0x00 前言前几天我读了两篇非常棒的论文&#xff1a;第一篇是发表在blackhat.com上的“A New Era of SSRF ”&#xff0c;讲述的是不同编程语言的SSRF问题&#xff1b;第二篇是由Positive Technology发表的一篇名为“PHP Wrapper” 的论文&#xff0c;它主要讲述的是如何以多种…

matlab 爬虫 例子,认识爬虫(示例代码)

爬虫分为两种&#xff1a;1.通用爬虫。2.聚焦爬虫。通用爬虫&#xff1a;搜索引擎用的爬虫系统。一.目标&#xff1a;爬取所有网站的网页下载下来&#xff0c;存放到本地服务器里形成备份。二.抓取流程&#xff1a;a.首选选取一部分已有的url,把这些url放到待爬取队列。b.从队列…

如何用notepad写php,notepad新手怎么使用

新手使用notepad的几个小技巧&#xff1a;一、软件始终置于屏幕最前方有时候我们在运行程序时&#xff0c;需要将notepad放置到屏幕最前方&#xff0c;此时只需要在工具栏中点击&#xff1a;view——always on tops&#xff1b;此时notepad就会一直处于屏幕最前方。注&#xff…

rman打开oracle归档日志,Oracle RAC中使用RMAN管理归档日志

RMAN归档配置的两种方案1.在Oracle asm和集群文件系统时的归档方案对于Oracle RAC来说首选是使用Oracle asm作为reocvery区域。可选择的你也可以使用集群文件系统的归档方案。如果你使用了一种集群文件系统&#xff0c;那么当进行日志归档时每个节点会将归档日志写到集群文件系…

oracle10g数据库复制,oracle -10g 中Duplicate 复制数据库

oracle --10g 中Duplicate 复制数据库本次实验通过duplicate命令&#xff0c;在本机环境中创建一个复制数据库。目标数据库为hongye、复制数据库为catdb。环境别名设置&#xff1a;alias sqlrlwrap sqlplus /nologalias rmanrlwrap rmanalias dbscd $ORACLE_HOME/dbsalias rdbc…

oracle resize什么意思,Oracle调整表空间大小resize

SQL> ALTER DATABASE DATAFILE D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA RESIZE 300m;ALTER DATABASE DATAFILE D:\ORACLE\ORADATA\ICAPP\IC_DATA6.ORA RESIZE 300m*ERROR 位于第 1 行:ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据但是SQL>select d.filename,d.fi…

双网卡主机配置oracle监听,VirtualBox设置双网卡实现虚机上网及主宿机互访

VirtualBox 虚拟机之间互连、主宿机互连、以及主宿机连接互联网的功能非常实用。下面介绍实现主宿机通过虚拟网卡互连方式。1 全局配置VirtualBox安装完成后&#xff0c;会在系统中装一块虚拟网卡&#xff0c;我们在 管理> 全局设定中可以看到。这块网卡是在 Host-Only 连接…

oracle英文日期转换为中文,excel中文日期与英文日期如何转换

一、一般的转换方法假如A列为英文日期格式&#xff0c;譬如是&#xff1a;A1 19-Jul-12A2 20-Jul-12A3 21-Jul-12A4 22-Jul-12那么&#xff0c;如果你想将其转换为中文的日期&#xff0c;假如放在B列&#xff0c;首先你得将B列设置为中文的日期格式&#xff0c;方法是&…

oracle笔试题目及答案,Oracle 笔试题目带答案.doc

( )程序包用于读写操作系统文本文件。(选一项)A、Dbms_outputB、Dbms_lobC、Dbms_randomD、Utl_file( )触发器允许触发操作的语句访问行的列值。(选一项)A、行级B、语句级C、模式D、数据库级( )是oracle在启动期间用来标识物理文件和数据文件的二进制文件。(选一项)A、控制文件…

php sphinx api调用,php调用Sphinx

1.将文件 coreseek-3.2.14/testpack/api/sphinxapi.php 拷贝到任意可被php程序包含出。2.在要调用的脚本中包含文件 sphinxapi.php 如下示例namespace Admin\Controller;use Admin\Common\Controller\CommonController;require(./Public/api/sphinxapi.php); //包含sphinxclass…

oracle关于时区,关于oracle时区

关于oracle时区[more]商业和数据库很多时候必须跨时区工作&#xff0c;从9i开始&#xff0c;oracle环境开始有了时区意识&#xff0c;通过指定数据库的时区和使用TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE数据类型来实现该功能。TIMESTAMP WITH TIME ZONE不会…

苹果双系统运行oracle失败,oracle 11gR2 RAC for linux x86_64 grid运行root.sh 失败问题处理...

昨天一个朋友问到我&#xff0c;在oracle 11gR2 RAC for linux x86_64安装过程中&#xff0c;grid用户运行root.sh在第一节点可以成功&#xff0c;但在第二节点不成功,报错如下&#xff1a;CRS-2674: Start of ora.cssd on racnode2 failedCRS-2679: Attempting to clean ora.c…

微信公众号php提交表单,PHP教程:使用YII2框架实现微信公众号中表单提交功能...

《PHP教程&#xff1a;使用YII2框架实现微信公众号中表单提交功能》要点&#xff1a;本文介绍了PHP教程&#xff1a;使用YII2框架实现微信公众号中表单提交功能&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。相关主题&#xff1a;YII框架PHP教程刚接触微信,要…