Matlab之图像的邻域和块操作(八)

图像的邻域操作是指输出图像的像素点取值决定于输入图像的某个像素点及其邻域内的像素,通常像素点的邻域是一个远小于图像自身尺寸、形状规则的像素块,例2×2正方形、 2×3矩形、或近似圆形的多边形。邻域操作根据邻域的类型又可分为:滑动邻域操作和分高邻域操作

在MAILAB中,提供了几个实现邻域操作的的数,用户可直接调用这些函数,实现各种操作。

  • 通用滑动邻域操作函数nlfilter( )
  • 列方向邻域操作函数colfilt( )
  • 分离邻域操作函数blockproc( )

图像处理函数nlfilter

用法:

B = nlfilter(A,[m n],fun)

B = nlfilter(A,[m n],fun,P1,P2,...)

B = nlfilter(A,'indexed',...)

B = nlfilter(A,[m n],fun) %表示对图像A的每一个m*n滑块应用函数fun。
%fun函数必须接受m*n块作为输入,并返回一个标量y,形如: c=fun(x)    c为m*n块x的中心像素点的输入值。

例子:

B = nlfilter(A,[3 3],@myfun);

其中myfun是以m文件如下:

function scalar = myfun(x)
scalar = median(x(:));

再介绍分离邻域操作函数
以代码为例:

I = imread('lena_color_512.tif');

fun = @(block_struct) imrotate(block_struct.data, 30); %获取分离块操作的函数句柄
I1 = blockproc(I, [64, 64], fun);  %进行分离块操作

fun = @(block_struct) std2(block_struct.data); %获取分离块操作的函数句柄
I2 = blockproc(I, [32,32],fun);

fun = @(block_struct) block_struct.data(:, :, [3 1 2]); %获取分离块操作的函数句柄
blockproc(I, [100 100], fun, 'Destination', 'brg_lena.tif');

set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);  %修改图像位置的默认设置
set(0, 'defaultFigureColor', [1 1 1]);  %修改图形背景颜色的设置

figure
subplot(131), imshow(I1);
subplot(132), imshow(I2, []);
subplot(133), imshow('brg_lena.tif');

下图中第一个为将每个像素点旋转30°的结果,分为64×64的像素点
下图中第二个为将图形分成32×32的像素,再设定每一块的值
下图中第三个为对绿色图层进行操作

在这里插入图片描述


在进行图像处理过程中,用户通常选择感兴趣的区域进行相关操作,MATLAB也提供了一些图像区域选择和操作的函数。

  • 多边形区域选择函数roipoly( )
  • 灰度ROI区域选择函数roicolor( )
  • 区域填充函数rofifll( )
  • 区域滤波函数roifilt2( )
I = imread('lena_color_512.tif');
I = rgb2gray(I);

BW1 = roicolor(I, 55, 100);  %基于灰度图的ROI区域选取
c = [87 171 201 165 79 32 87];
r = [133 133 205 259 259 209 133];   %定义ROI顶点位置
BW = roipoly(I, c, r);   %根据r和c选择ROI区域;

I1 = roifill(I, BW);  %根据生成BW掩膜的图像进行区域填充

h = fspecial('motion', 20, 45);  %创建motion滤波器并说明参数
I2 = roifilt2(h, I, BW);   %进行区域滤波

set(0, 'defaultFigurePosition', [100, 100, 1000, 500]);  %修改图像位置的默认设置
set(0, 'defaultFigureColor', [1 1 1]);  %修改图形背景颜色的设置

figure(1)
subplot(121), imshow(BW1);  %显示处理结果
subplot(122), imshow(BW);    %显示ROI区域

figure(2)
subplot(121), imshow(I1);      %显示填充效果
subplot(122), imshow(I2);      %显示区域滤波效果

结果为:
左图为根据我们划定区域设定的灰度图,右图为我们自己确定顶点之后的ROI区域
在这里插入图片描述
左图为将ROI区域填充的效果,右图为将ROI区域滤波的结果
在这里插入图片描述

  • roicolor
    其中roicolor可以根据颜色选定区域,用法为:(注意其只能处理二维的图像,故彩色图需转换为灰度图)
BW = roicolor(A,low,high)

BW = roicolor(A,v)

BW = roicolor(A,low,high)色图范围为[low high],返回这些像素选择区域。BW为大小和A相同的数组,若A中元素值在[low high]范围内,则返回值1,否则返回0.

  • fspecial
h = fspecial(type)
h = fspecial(type,parameters,sigma)
type类型type作用
type=‘average’为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。默认为3*3的矩阵
type= ‘gaussian’为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5。
type= ‘laplacian’为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。
type= ‘log’为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= ‘prewitt’为prewitt算子,用于边缘增强,无参数。
type= ‘sobel’为著名的sobel算子,用于边缘提取,无参数。
type= ‘unsharp’为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

又学会了新的图像处理方法,成就满满呢,继续加油!

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值