Matlab 3x3 加权平均滤波器
Matlab 3x3 weighted averaging filter
根据另一个 post 的建议,我创建了一个基本的 3x3 平均滤波器,如下所示:
blurP = zeros(512, 512);
for i = 1:510
for j = 1:510
sum = 0;
for k = i:i+2
for l = j:j+2
sum = sum+P(k,l);
end
end
blurP(i+1,j+1) = mean2(P(i:i+2,j:j+2));
end
end
imshow(P), figure, imshow(blurP, []);
我需要创建一个有两个选项的加权过滤器:一个计算中心元素(3x3 网格的)两次,因此总共有十个元素。另一个总共有十六个元素,中心元素被计算了四次,相邻的元素被计算了两次——只有 3x3 网格的角元素被计算了一次。
最简单的选择是只使用卷积(通过 conv2
函数)。然后设计你的内核就像写出你所描述的那样简单:
kernel1 = [1 1 1
1 2 1
1 1 1]/10;
blurP1 = conv2(P, kernel1, 'same');
和
kernel2 = [1 2 1
2 4 2
1 2 1]/16;
blurP2 = conv2(P, kernel2, 'same');
根据另一个 post 的建议,我创建了一个基本的 3x3 平均滤波器,如下所示:
blurP = zeros(512, 512);
for i = 1:510
for j = 1:510
sum = 0;
for k = i:i+2
for l = j:j+2
sum = sum+P(k,l);
end
end
blurP(i+1,j+1) = mean2(P(i:i+2,j:j+2));
end
end
imshow(P), figure, imshow(blurP, []);
我需要创建一个有两个选项的加权过滤器:一个计算中心元素(3x3 网格的)两次,因此总共有十个元素。另一个总共有十六个元素,中心元素被计算了四次,相邻的元素被计算了两次——只有 3x3 网格的角元素被计算了一次。
最简单的选择是只使用卷积(通过 conv2
函数)。然后设计你的内核就像写出你所描述的那样简单:
kernel1 = [1 1 1
1 2 1
1 1 1]/10;
blurP1 = conv2(P, kernel1, 'same');
和
kernel2 = [1 2 1
2 4 2
1 2 1]/16;
blurP2 = conv2(P, kernel2, 'same');