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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

linux无filelength函数,Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

定义Shell函数(define function) 语法&#xff1a;[ function ] funname [()]{action;[return int;]}说明&#xff1a;可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。参数返回&#xff0c;可以显示加&#xff1a;return 返回&#xff0c;如果不加&…

linux ssh登录历史,Linux中的SSH登录

在Linux系统中需要使用SSH远程登录到另一个Linux系统&#xff0c;可以使用SSH命令加用户和IP地址的方法。ssh命令用于远程登录上的Linux主机。常用格式&#xff1a;ssh [-l login_name] [ –p port] [userhostname]例如不指定用户&#xff1a;ssh 192.168.0.100指定用户&#x…

linux监控电脑配置,Zabbix基本配置及监控主机

监控主机一版需要在被监控的主机上安装Zabbix Agent监控主机安装zabbix-agent首先需要在被监控的主机上安装agent&#xff0c;可以下载预编译好的RPM进行安装&#xff0c;下载地址&#xff1a;http://www.zabbix.com/download也可以源码安装&#xff0c;类似server的安装&#…

linux内网安装git,一键安装GitLab7在RHEL6.4上

&#xff11; 关于gitlab7无论如何gitlab是个好东西&#xff0c;但是极难安装和配置。bitnami(https://bitnami.com/)的一键安装包虽然可以解决大问题&#xff0c;但是仍有很多人无法配置gitlabnginx和email发送等等问题。今天特意完整地再梳理一次。对各位读者的问题不再逐一…

linux显示点阵字体,Fedora 17中文字体显示点阵状的解决方法

在Fedora 17中文字体的显示变成点阵状了&#xff0c;为什么在Fedora 16下中文字体是文泉驿正黑。到Fedora 17之后&#xff0c;中文字体由文泉驿正黑(WenQuanYi Zen Hei)变为WenQuanYi Zen Hei Sharp。这个新字体的特殊之处就是在12磅及以下的中文字体&#xff0c;将显示成点阵字…

c语言打印空心矩形图案的程序,C语言之输出空心棱形图案

#include#includevoid main(){int n,j,i; /*i为行数,j为每行中的项数*/printf("输入图案上三角的高度n:");scanf("%d",&n);;i < n;i) /*打印上三角&#xff0c;(包括中间行)*/{;j < n - i;j){-i || j n - - i * i )printf(" *");el…

c语言优化冒泡法,C语言:冒泡法排序一组数,如何优化?

#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){int arr[] { 5, 6, 7, 8, 9 ,1, 2, 3, 4};int i 0;int j 0;int flag;int size sizeof(arr) / sizeof(arr[0]);for (i 0; i < size- 1 ; i){flag 1;//设置标志位&#xff0c;优化冒泡for (j 0; j < s…

android 分享到豆瓣,Android项目总结之社会化分享

随着现在社交网络的日益繁多&#xff0c;众多的社交客户端已占据了人们的大量时间&#xff0c;所以在我们的应用中具有一键分享的功能对提高我们产品的知名度有很大的帮助。新浪微博、腾讯微博、腾讯QQ、微信、QQ空间、豆瓣等众多知名社交站点&#xff0c;都是我们可以分享的去…

android实现自动横竖屏切换,android 中实现横竖屏切换【原创】

我们在使用android手机的时候&#xff0c;发现一些应用有横竖屏切换的功能&#xff0c;一般实现有以下几种方法&#xff1a;一、设置1.通过XML设置横竖屏切换在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性&#xff0c;它有以下几个…

超级管理器Android,超级文件管理器app

详情超级文件管理器app&#xff0c;一款帮助你管理手机内存的软件&#xff0c;还可以重命名&#xff0c;移动&#xff0c;删除文件&#xff0c;在Android平台上完美运行&#xff0c;并能够与其他OI系列软件结合使用! 能快速地查找到目标文件&#xff0c;十分方便用户管理自己手…

android miui ios,从iOS到Android——小米11及小米生态实际使用体验

从iOS到Android——小米11及小米生态实际使用体验2021-02-22 15:29:5693点赞155收藏131评论创作立场声明&#xff1a;文中的设备均为自购&#xff0c;无任何特定立场。2021年2月10日&#xff0c;我的iPhoneX手机突然黑屏&#xff0c;拿到Apple Store检测&#xff0c;经诊断是屏…

p50会搭载鸿蒙吗,华为Mate40和华为P50也会搭载鸿蒙,华为Mate30跌至白菜价让路

原标题&#xff1a;华为Mate40和华为P50也会搭载鸿蒙&#xff0c;华为Mate30跌至白菜价让路华为Mate40和华为P50也会搭载鸿蒙&#xff0c;华为Mate30跌至白菜价让路&#xff01;华为P50Pro的机身部分后置摄像头模块的外观有发生了改变&#xff0c;可以看到华为P50Pro并没有将所…

linux将db2账户添加到组_超实用的shell脚本--Linux安全加固设置,值得收藏

概述近几年来Internet变得更加不安全了。网络的通信量日益加大&#xff0c;越来越多的重要交易正在通过网络完成&#xff0c;与此同时数据被损坏、截取和修改的风险也在增加。 只要有值得偷窃的东西就会有想办法窃取它的人。Internet的今天比过去任何时候都更真实地体现出这一点…

迷你世界无人驾驶地铁火车_出口伊斯坦布尔地铁列车“云下线”

轨道世界 RailWorld开放&#xff5c;共享&#xff5c;价值导读 ID&#xff1a;RailWorld出口伊斯坦布尔地铁列车“云下线”全自动无人驾驶&#xff0c;全寿命远程跟踪、诊断和维护&#xff0c;全车内循环感应系统&#xff0c;极具土耳其风情的外观及内饰……7月14日&#xff0c…

java: 程序包com.github.pagehelper不存在_Rust语言正在兴起,Java、Python、C的末日来临?...

您可能从未用Mozilla创建的开源&#xff0c;系统级编程语言Rust编写任何东西&#xff0c;但是您可能会在某个时候写。在Stack Overflow的2019年开发人员调查中&#xff0c;开发人员将Rust评为“最受欢迎的”语言&#xff0c;而Redmonk在半年的语言排名中&#xff0c;Rust 跻身前…

惠安七号机器人创意园_我是F518创意园,请为我投票!

春去秋来&#xff0c;一个轮回又一年。“ 你知道F518创意园开园多久了吗&#xff1f;对的&#xff0c;13年&#xff01;”作为深圳实施“腾笼换鸟”首批项目和深圳申请联合国科教文组织“设计之都”重要组成部分&#xff0c;我们开园至今已经13年了&#xff01;白驹过隙&#x…