bwlookup
使用查找表进行非线性过滤
语法
A = bwlookup(BW,lut)
gpuarrayA = bwlookup(gpuarrayBW,lut)
描述
例子
输入参数
输出参数
算法
由所执行的筛选操作的每次迭代中的第一步bwlookup
需要计算指数
为向量附近地区
基于图像上邻域矩阵的二值像素模式BW
.的价值附近地区
在访问指数
,附近地区(索引)
,插入到输出图像中一个
在目标像素位置。这就产生了图像一个
是与vector相同的数据类型附近地区
.
由于目标像素位置是一对一对应的,所以图像a与图像大小相同BW
.如果目标像素位置在图像的边缘上BW
如果2 × 2或3 × 3邻域矩阵的任何部分延伸到图像边缘之外,那么这些非图像位置将被填充为0,以便执行滤波操作。
下图显示了从邻域矩阵中的二进制0和1模式到其二进制表示的映射。在二进制表示中加上1得到指数
哪些是用来访问的附近地区
.
对于2乘2的邻域,长度(附近地区)
是16。每个邻域有四个像素,每个像素有两种可能的状态,所以排列的总数是24= 16。
为了说明这一点,这个示例展示了2 × 2矩阵中的像素模式如何确定在附近地区
放在目标像素位置。
创建随机的16元素
附近地区
向量包含uint8
数据。Scurr = rng;保存当前随机数生成器的种子状态rng (“默认”)%总是生成相同的随机数集Lut = uint8(round(255*rand(16,1))))%生成lutrng (scurr);%恢复
Lut = 208 231 32 233 161 25 71 139 244 246 40 248 244 124 204 36
创建一个2 × 2图像,并在本例中假设目标像素位置为location
BW (1, 1)
.Bw = [10 0;0 1]
Bw = 1 0 0 1
通过参考上面的颜色编码映射图,可以计算这个2乘2邻域的二进制表示,如下面的代码片段所示。逻辑上的1
BW (1, 1)
对应于图中的蓝色,它映射到4位二进制表示(,2)中位置0的最低有效位(LSB)0= 1)BW (2, 2)
是红色,它映射到4位二进制表示中位置3的最高有效位(MSB) (23.= 8)。% BW(1,1):蓝色方形;在右边设置位位0% BW(2,2):红方;在左侧设置位位3binNot ='1 0 0 1';2x2邻域矩阵的%二进制表示X = bin2dec(binNot);%从二进制转换为十进制index = X + 1%加1计算uint8矢量lut的指标值A11 = lut(指数)A(1,1)点的值%
index = 10 A11 = 246
以上计算预测输出图像A在目标位置应包含246值
(1)
.A = bwlookup(BW,lut)%执行过滤
A = 246 32 161 231
(1)
实际上等于246。
请注意
有关执行图像侵蚀的更健壮的方法,请参见函数imerode
.
对于3乘3的社区,长度(附近地区)
是512。每个邻域有9个像素,每个像素有两种可能的状态,所以排列的总数是29= 512。
计算3 × 3邻域处理的二进制表示的过程与上面2 × 2邻域的计算过程相同。