主要内容

bwlookup

使用查找表的非线性过滤

描述

例子

J= bwlookup (BW附近地区对二值图像执行2乘2或3乘3的非线性邻域滤波操作BW.邻域处理确定用于访问查找表中的值的整型索引值附近地区.所获取的附近地区Value为输出图像中的像素值J在目标位置。

例子

全部折叠

构造向量附近地区使过滤操作放置一个1只有当BW的2 × 2邻域的所有4个像素都被设为时,才会在输入图像中的目标像素位置1

lutfun = @ (x)(总和(x (:)) = = 4);附近地区= makelut (lutfun, 2)
附近地区=16×10 0 0 0 0 0 0⋮

加载二进制图像。

BW1 = imread (“text.png”);

使用16元向量进行2 × 2邻域处理附近地区

BW2 = bwlookup (BW1,附近地区);

显示缩放前后的图像。

图;h1 =情节(1、2、1);imshow (BW1),轴;标题(原始图像的) h2 = subplot(1,2,2);imshow (BW2);轴;标题(“侵蚀形象”% 16X缩放查看侵蚀文字的效果集(h1,“Ylim”64年[1],“Xlim”64年[1]);集(h2,“Ylim”64年[1],“Xlim”64年[1]);

图中包含2个轴对象。标题为“原始图像”的轴对象1包含一个类型为“图像”的对象。标题为“侵蚀图像”的轴对象2包含一个类型为“图像”的对象。

输入参数

全部折叠

二值图像通过非线性邻域滤波操作进行变换,指定为二维逻辑矩阵或二维数值矩阵。对于数字输入,任何非零像素都被认为是1真正的).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

输出像素值的查找表,指定为16个或512个元素的向量。的大小附近地区确定执行两个邻域操作中的哪一个。你可以使用makelut函数创建查找表。

  • 如果附近地区包含16个数据元素,然后邻域矩阵是2 × 2。

  • 如果附近地区包含512个数据元素,然后邻域矩阵是3 × 3。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

输出参数

全部折叠

输出图像,作为灰度或二进制图像返回,其像素值的分布由查找表的内容决定,附近地区.输出图像J是否与输入图像大小相同BW数据类型和附近地区

算法

全部折叠

由。执行的过滤操作的每次迭代中的第一步bwlookup需要计算指数为向量附近地区基于图像上邻域矩阵的二值像素模式BW.的价值附近地区在访问指数附近地区(索引),插入到输出图像中J在目标像素位置。这就产生了图像J与vector相同的数据类型附近地区

由于在目标像素位置,图像中存在1对1的对应关系J与图像大小相同吗BW.如果目标像素位置在图像的边缘BW如果2 × 2或3 × 3邻域矩阵的任何部分超出了图像边缘,那么这些非图像位置将被填充为0,以执行滤波操作。

下图显示了从邻域矩阵的二进制0和1模式到它的二进制表示的映射。在二进制表示法上加1得到指数是用来访问的吗附近地区

2×2附近查找

为2×2的社区,长度(附近地区)是16。每个邻域有四个像素,每个像素有两种可能的状态,所以排列的总数是24= 16。

为了说明这一点,本例演示了2 × 2矩阵中的像素模式如何确定输入的条目附近地区放置在目标像素位置。

  1. 创建随机16-element附近地区向量包含uint8数据。

    scurr =提高;%保存当前随机数发生器种子状态rng (“默认”%总是生成相同的随机数集2 . uint8(round(255*rand(16,1)); uint8(round(255*rand(16,1));%生成附近地区rng (scurr);%恢复
    Lut = 208 231 32 233 161 25 71 139 244 246 40 248 244 124 204 36
  2. 创建一个2乘2的图像,并假设在本例中目标像素位置为locationBW (1, 1)

    Bw = [10 0;0 1]
    Bw = 1 0 0 1
  3. 通过参考上面的颜色编码映射图,这个2 × 2邻域的二进制表示可以计算出来,如下面的代码片段所示。逻辑上的1BW (1, 1)对应图中的蓝色,对应4位二进制表示(,2)中位置0的最低有效位(LSB)0= 1).逻辑1在BW (2, 2)是红色的,它映射到4位二进制表示(23.= 8)。

    % BW(1,1):蓝色方块;在右边设置位位0% BW(2,2):红色方块;将位位3设置在左边binNot ='1 0 0 1'% 2x2邻域矩阵的二进制表示X = bin2dec(binNot);%转换从二进制到十进制index = X + 1%添加1来计算uint8 vector lut的索引值A11 =附近地区(指数)% value at A(1,1)
    指数= 10
  4. 由以上计算可知,输出图像A在目标位置处包含的值为246(1)

    = bwlookup (BW,附近地区)%进行过滤
    A = 246 32 161 231

    (1)实际上等于246。

3×3邻域查找

为3×3的社区,长度(附近地区)是512。每个邻域有9个像素,每个像素有两种可能的状态,所以排列的总数是29= 512。

计算3 × 3邻域处理的二进制表示的过程与计算2 × 2邻域的过程相同。

扩展功能

另请参阅

介绍了R2012b