第三章(续)

目录

  • 第二章 灰度变换与空间滤波(续)
    • 直方图处理与函数绘图
      • 生成直方图
      • 直方图均衡
      • 直方图匹配
    • 空间滤波
      • 线性空间滤波
      • 非线性空间滤波
    • 图像处理工具箱的标准滤波器
      • 线性空间滤波器
      • 非线性空间滤波器

第二章 灰度变换与空间滤波(续)

直方图处理与函数绘图

生成直方图

应用函数 imhist
语法如下

h = imhist(f,b)

h为生成的直方图,f为输入图像,b为"容器"的数目。
以下面这幅图像的灰度级分布直方图为例
image
运行如下代码生成直方图

>> bar(h,0)
>> f = imread('2-3-1.jpg');
>> imhist(f)

image
为了便于观察,将灰度级分为十个级别,使用bar函数绘制条形图

>> f = imread('2-3-1.jpg');
>> h = imhist(f,10);
>> bar(h,1);

image

直方图均衡

观察上面两个直方图的分布,灰度级主要集中在较暗区域。现在通过直方图均衡来改变图像的对比度。
运行代码

>> f = imread('2-3-1.jpg');
>> g = histeq(f,256);
>> imshow(g)
>> imhist(g)

获得均衡后的图像
image
其灰度分布直方图为
image
可以看到,灰度值的动态范围增加了。

直方图匹配

直方图匹配应用histeq函数,可以用规定的函数映射图像的灰度值。格式如下

g = histeq(f, hspec)

f为输入图像,hspec为一个规定的行向量。
同时还可以应用adapthisteq处理图像,这个函数可以通过直方图匹配方法逐个处理图像的一部分,最后用双线性内插的方法将其组合起来,从而消除人工引入的边界。

>> f=imread('2-3-3.jpg');
>> imshow(f);
>> g3=adapthisteq(f,'NumTiles',[25 25],'ClipLimit',0.05);
>> figure,imshow(g3)

image
原始图像
image
处理后的图像
可以看到,图像的细节变多了。

空间滤波

线性空间滤波

线性空间滤波的操作是将邻域中的每个像素乘以相应的系数,然后求和,从而得到点(x,y)处的响应。
处理方式包括相关和卷积,其中卷积需要将模板旋转180°,其余操作完全相同。关于像素的边界处,有不同的填充方法,同时得到不同的结果。
在MATLAB中,处理线性空间卷积的函数是imfilter,格式如下

g = imfilter(f,w,filtering_mode,boundary_options,size_options)

其中后三个属性设置了滤波模式,边界选项和大小选项。

分别运行一下代码

f = ones(512);
for i = 1:256for j = 1:256f(i,j)=0;end
end
for i = 257:512for j = 257:512f(i,j)=0;end
end>> gd=imfilter(f,w);
>> gr=imfilter(f,w,'replicate');
>> gs=imfilter(f,w,'symmetric');
>> gc = imfilter(f,w,'circular');
>> g8r = imfilter(im2uint8(f),w,'replicate');

生成一幅512×512的图像,并进行线性操作,可得以下图像。
image

非线性空间滤波

非线性空间滤波与线性空间滤波机理相同。而线性滤波基于计算乘积和,非线性空间滤波则进行非线性操作,例如,让响应为最大像素值。
非线性操作的语法为

g = colfilt(f,[m n], 'sliding', fun)

其中f是输入图像,m和n是滤波器维数,sliding表明处理过程,fun是函数句柄。
填充边界的问题可以用padarray函数来解决。

fp = padarray(f, [r c], method, direction) 

其中,f为输入图像,fp为填充后的图像,[r c]表示用于填充f的行和列数,method和direction代表了填充的方法和方向。

对以下图像进行操作
image

>> f = imread('2-4-2.jpg');
>>  g = colfilt(f,[5 5],'sliding',@mean);
>>  g = uint8(g);
>>  imshow(g);

处理结果如下
image

图像处理工具箱的标准滤波器

线性空间滤波器

>> f= imread('2-4-3.jpg');
>> w4 = fspecial('laplacian',0);
>> w8 = [1 1 1;1 -8 1;1 1 1];
>> f = tofloat(f);
>> g4 = f - imfilter(f,w4,'replicate');
>> g8 = f - imfilter(f,w8,'replicate');
>> imshow(f);
>> figure,imshow(g4);
>> figure,imshow(g8);

原始图像
image
g4
image
g8
image

非线性空间滤波器

>> f=imread('2-4-4.jpg');
>> fn = imnoise(f,'salt & pepper',0.2);
>> gm = medfilt2(fn);
>> gms = medfilt2(fn,'symmetric');
>> subplot(221),imshow(f)
>> subplot(222),imshow(fn)
>> subplot(223),imshow(gm)
>> subplot(224),imshow(gms)

image

转载于:https://www.cnblogs.com/magicalzh/p/9273323.html

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

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

相关文章

Linux Mysql 安装方法

1、检查是否有安装 [rootJDDB mysql]# yum list installed | grep mysql mysql-community-client.x86_64 5.6.39-2.el7 mysql56-community mysql-community-common.x86_64 5.6.39-2.el7 mysql56-community mysql-community…

oracle 经纬度算距离,根据经纬度诀别用java和Oracle存储过程计算两点距离

根据经纬度分别用java和Oracle存储过程计算两点距离create or replace procedure SP_GET_DISTANCE(cx in number,cy in number,sx in number, sy in number,distance out varchar2)isd number;x number;y number;r number;pi number;begin--开始计算r:6371229;--地球半径pi:3.1…

Kafka集群安装--测试--关闭

一、前提 1、kafka安装包下载:http://kafka.apache.org/downloads 2、jdk已安装 3、scala已安装 4、zookeeper集群已安装并运行二、步骤 1、对kafka_2.9.2-0.8.1.tgz进行解压缩:tar -zxvf kafka_2.9.2-0.8.1.tgz。2、对kafka目录进行改名:mv …

Java中的工厂模式

设计模式遵循原则 开闭原则:对扩展开放,对修改关闭里氏代换原则:只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被覆用。而衍生类也能够在基类的基础上增加新的行为依赖倒转原则:开闭…

python的底层实现_Python底层封装实现方法详解

这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下事实上,python封装特性的实现纯属“投机取巧”,之所以类对象无法直接调用私有方法和属性&a…

php 附近的距离,PHP查询附近的人及其距离的实现方法_PHP

本文实例讲述了PHP查询附近的人及其距离的实现方法。分享给大家供大家参考,具体如下:array(lat>$lat $dlat,lng>$lng-$dlng),right-top>array(lat>$lat $dlat, lng>$lng $dlng),left-bottom>array(lat>$lat - $dlat, lng>$ln…

统计指定目录下的视频时长

package time;import java.io.File;import org.apache.log4j.Logger;import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.MultimediaInfo;public class Test2 {/* 支持的后缀 */private static final Str…

怎么在cmd中运行python脚本_cmd中运行python脚本智能使用流程

(此时的ScaleMode自动变Vbuser)更有趣的是用来计算字串高、宽的TextHeight/TextWidth也变成以座标0-100的方式来表现了On Error Resume NextSet outstreemWscript.stdoutIf (LCase(Right(Wscript.fullname,11))"Wscript.exe") ThenSet objShellWscript.CreateObject(…

世界时钟 软件_Clocker for Mac(世界时钟软件)

Clocker for Mac是一款Mac平台上免费的世界时钟工具,方便我们查看世界各地的时间,它是开源免费的,完全没有广告。包括数百个时区,支持24小时制或AM / PM,macz提供Clocker mac免费版,欢迎前来下载&#xff0…

Mac 设置 NDK

2019独角兽企业重金招聘Python工程师标准>>> 1、首先查看我自己的android studio ,找到以下路径 如上图,打开一个 AS 项目,file - project structure 这是我的3 个路径 Ndk /Users/dhbm/Library/Android/sdk/ndk-bundle Sdk /User…

Workbench has not been created yet

原因是:加载的插件变更后需要清理 在启动参数最后加入 -clean

oracle必须声明标识符函数,引用变量时需要必须声明标识符

SQL> declare2 pname emp.ename%type;3 psal emp.sal%type;4 begin5 select enmae,sal into pname,psal from emp where empno7782;6 dbms_output.put_line(pname||xsis||psal);7 end;8 /pname emp.ename%type;*第 2 行出现错误:ORA-06550: 第 2 行, 第 7 列:PLS-002…

四参数拟合曲线_每周放送|曲线拟合

曲线拟合No.1什么是曲线拟合所谓的曲线拟合,就是使用某一个模型(或者称为方程式),将一系列的数据拟成平滑的曲线,以便观察两组数据之间的内在联系,了解数据之间的变化趋势。No.2曲线拟合的应用在数据分析时,我们有时需…

Spark集群运行jar包程序里的print日志哪里去了?

默认情况下,是输出到stdout里的。 方法一: 进入work所在机器的spark安装目录下的work目录,里面有日志输出。 方法二: 进入spark web ui 里 点击stdout就可以查看,如果没有可能在其他work上。

hibernate oracle clob 注解,Hibernate3.X实现基于CLOB字段类型的注解方式:

一:Hibernate3.X实现基于CLOB字段类型的注解方式的例子:下面直接上代码:二:UserInfo.javapackage cn.gov.csrc.cms.model;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;impo…

Flutter下拉刷新,上拉加载更多数据

下拉刷新 很简单,直接使用 RefreshIndicator 组件, onRefresh 为重新获取数据的方法 Widget build(BuildContext context) {return Scaffold(body: Container(padding: EdgeInsets.all(2.0),child: RefreshIndicator(onRefresh: _refresh,backgroundColo…

qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库

我们要处理图片时,无论是在电脑还是手机上,往往都需要下载软件,但如果你只是临时用一下的话,下载软件难免显得工程有点浩大。下面就推荐几个图片处理网站,打开网页就能用。1、图片处理 funny。pho。to这个网站提供了很…

Intellij IDEA15:建立Scala的Maven项目

原文链接:http://blog.csdn.net/silentwolfyh/article/details/51172369 ------------------------------------------------------------------------------------ 在创建Scala的Maven之前要安装JavaJDK 、 Scala 的JDK 、 Maven配置,请参考下面 Int…

linux临时启动进程命令,Linux常用命令(一)服务控制及优化启动过程

Linux常用命令(一)服务控制及优化启动过程一、Red hat系统开机引导过程1、linux操作系统的引导过程一般包括以下几个阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、init进程初始化。2、Linux系统中的进程使用数字进行标记,每个进程的身份标记号称为…

linux 解决端口占用

2019独角兽企业重金招聘Python工程师标准>>> 1. netstat -apn|grep 9876 2.kill -9 端口号 --------- java 在linux后台运行的命令 ------------- nohup java -jar demo-shiro-0.0.1-SNAPSHOT.jar >temp.txt & 转载于:https://my.oschina.net/likaixuan0/…