Matlab 图像的邻域和块操作
图像的邻域操作是指输出图像的像素点取值,由输入图像的某个像素点及其邻域内的像素,通常像素点的邻域是一个远小于图像本身尺寸、形状规则的像素块,如2×2,3×3正方形、2×3矩形等,或者近似圆形的多边形。在Matlab中,提供了几个实现邻域操作的函数:
通用滑块邻域操作函数:
nlfilter()
,语法包括:B = nlfilter(A, [m n], fun)
:输入灰度图像A
,返回图像B
,按照尺寸m
×n
滑动邻域,利用运算函数fun
处理后得到结果。其中fun
是一个传入m
×n
矩阵输出一个标量的函数,可以是mean
,mean2
,std
,std2
,min
,max
等Matlab自带的函数,或者使用inline
自定义的函数。B = nlfilter(A, 'indexed', ...)
:该函数中返回图像B
,它是输入的索引图像A
填充后的结果。如图像A
的数据类型是浮点型,则用”1”填充;如果是逻辑型或者无符号整型,则用 “0”填充。
以lena图为例:
lena.jpg
clc; clear all; close all;
A = imread('lena.jpg');
A1 = im2double(A);
B1 = nlfilter(A1, [4 4], 'std2');
fun = @(x) max(x(:));
B2 = nlfilter(A1, [3 3], fun);
B3 = nlfilter(A1, [6 6], fun);
figure(1);
subplot(1, 3, 1), imshow(B1);
subplot(1, 3, 2), imshow(B2);
subplot(1, 3, 3), imshow(B3);
- 分离邻域操作函数:
blockproc()
,语法包括:B = blockproc(A, [m n], fun)
:该函数中对输入图像A
,采用尺寸m
×n
分离块,利用运算函数fun
处理,处理后的结果为输出图像B
。B = blockproc(src_filename, [m n], fun)
:与上面函数的语法相似,但是同时读取和处理名为src_filename
的图像,处理时将图像的一个分块读入内存,这个调用方式对于大图像非常有效,如果输出矩阵B
过大,则可以使用参数Destination
,将处理结果直接写入该文件中。B = blockproc(adapter, [M N], fun)
:用于处理用户自己定义的图像格式,adapter
是读写图像的接口函数。blockproc(..., Name, Value, ...)
:该函数中按照Name-Value
的方式对于像进行分离块处理,Name-Value
取值可以查找Matlab的help文档。
其中关于块的一些定义如下:
变量 | 含义 |
---|---|
block_struct.border |
是一个两元素向量[V H] ,说明矩阵的垂直和水平结构 |
block_struct.blockSize |
是一个两元向量[rows cols] 说明块的尺寸 |
block_struct.data |
是一个M × N 或 M × N ×P 的矩阵 |
block_struct.imageSize |
是一个两元向量[row col] 说明输入图像的尺寸 |
block_struct.location |
是一个两元向量[row col] 说明输入图像的块数据中第一像素的位置 |
I = imread('peppers.png');
fun = @(block_struct) block_struct.data(:,:,[2 1 3]);
blockproc(I, [64 64], fun, 'Destination', 'grb_peppers.tif');
subplot(1, 2, 1), imshow(I);
subplot(1, 2, 2), imshow('grb_peppers.tif');
peppers.png(图左),grb_peppers.tif(图右)
- 列方向邻域操作函数:
colfilt()
,语法包括:B = colfilt(A, [m n], block_type, fun)
:该函数中将输入图像A
,按照尺寸m
×n
块重新组合成一个临时矩阵,利用fun
函数对这个临时矩阵处理,如果需要填充,则使用“0”填充。其中block_type
是个字符串,可以取distinct
或sliding
,取distinct
按照分离邻域的方式B = colfilt(A, [m n], [mblock nblock], block_type, fun)
B = colfilt(A, 'indexed', ...)
Matlab 图像的邻域和块操作的更多相关文章
- OpenCV2邻域和模板操作
在图像处理中,通过当前位置的邻域像素计算新的像素值是很常见的操作.当邻域包含图像的上几行和下几行时,就需要同时扫描图像的若干行,这就是图像的邻域操作了.至于模板操作是实现空间滤波的基础,通常是使用一个 ...
- matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明
转自:http://blog.csdn.net/fx677588/article/details/53301740 1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型( ...
- 使用matlab进行图像处理的一些常用操作和tip
本人还是习惯使用Python语言,有时候不得不使用matlab的时候就变得举步维艰,下面记录一下使用matlab进行图像处理的一些常用操作以及代码,方便之后查阅: 1. 图像的读取 %% 读取原图像 ...
- Matlab图像彩色转灰色
Matlab图像彩色转灰色 时间:2014年5月7日星期三 网上找的程序.实现图像彩色转灰色: I1=imread('C:\Users\Yano\Desktop\matlab\test1\4.jpg' ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- Matlab、R向量与矩阵操作 z
已有 1849 次阅读 2012-8-2 15:15 |系统分类:科研笔记|关键词:矩阵 480 window border center Matlab.R向量与矩阵操作 描 述 Matla ...
- Eigen 学习之块操作
Eigen 为 Matrix .Array 和 Vector提供了块操作方法.块区域可以被用作 左值 和 右值.在Eigen中最常用的块操作函数是 .block() . block() 方法的定义如 ...
- VIM块操作
一.可视模式 按v启用可视模式,之后移动光标可以选择. 如: 如果想整行操作,则用大写的V,再移动光标可以按行为单位进行选择. 二.列块操作 在 word中有一个功能,按alt加鼠标拖动,可以 ...
- Opencv中图像的遍历与像素操作
Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...
随机推荐
- [NOIP补坑计划]NOIP2015 题解&做题心得
感觉从15年开始noip就变难了?(虽然自己都做出来了……) 场上预计得分:100+100+60~100+100+100+100=560~600(省一分数线365) 题解: D1T1 神奇的幻方 题面 ...
- GRUB 引导流程
GRUB(bootloader)引导流程: GRUB,GRand Unified Bootlader ,是一个来自GUN项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在计算机内 ...
- python_字符串常用操作
name = "monicao"name.capitalize() #首字母大写print(name.capitalize()) print(name.count("o& ...
- JS冒泡排序方法
- java中的instanceof用法
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: ...
- 监控myserver计数器
- HTTP请求和响应模式(B/S)(2)
B/S 及浏览器/客服端模式 根据发送的状态码不同,显示response的状态不同
- java ee服务器/应用服务器的理解
42.由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现.43.可以这样认为,当在一台机器上配 ...
- server.htaccess 具体解释以及 .htaccess 參数说明
.htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...
- 调用支付宝SDK问题
近期做了一个项目里面要有支付.银联.支付宝,微信支付 我先一个一个写吧 先说支付宝SDK 支付宝SDK放进project里面之后肯定会报错.这时候你就要一个一个改掉 1. 2. 3. 哎 我懒得写了. ...