我需要使用盒式平均滤波器来缩小图像尺寸,我尝试编写此代码但是出现了错误:Unknown command option.
,错误在哪里以及盒式滤镜的正确算法是什么我知道这个想法其中,新像素=平均四个相邻像素。
代码:
clear, clc
image=imread('p128.jpg');
old_size=size(image);
out_image=zeros(old_size(1)/2 , old_size(2)/2);
for i = 1 : old_size(1) - 1
for j= 1 : old_size(2) - 1
for k= i : i+1
for t= j : j+1
out_image(k,t)=(image(i,j)+image(i+1,j)+image(i,j+1)+...
image(i+1,j+1))/4 ;
end
end
end
end
figure(1), imshow(out_image)
答案 0 :(得分:0)
您可以使用图像处理工具箱中的 im2cols
with 'distinct'
将窗口元素重新排列为列,然后计算每列的平均值,这将代表每个窗口的平均值。现在,在评论中,您说您不想使用IP工具箱中的任何功能,因此我们已将im2cols
替换为我们自己的定制实现。因此,假设im
是输入灰度图像数据,您可以使用此 -
box_len = 2; %// length of the box
im_cols = im2col_distinct(im,[box_len box_len]);
im_downsized = uint8(reshape(mean(im_cols,1),size(im,1)/box_len,[]));
相关功能 -
function out = im2col_distinct(A,blocksize)
nrows = blocksize(1);
ncols = blocksize(2);
nele = nrows*ncols;
row_ext = mod(size(A,1),nrows);
col_ext = mod(size(A,2),ncols);
padrowlen = (row_ext~=0)*(nrows - row_ext);
padcollen = (col_ext~=0)*(ncols - col_ext);
A1 = zeros(size(A,1)+padrowlen,size(A,2)+padcollen);
A1(1:size(A,1),1:size(A,2)) = A;
t1 = reshape(A1,nrows,size(A1,1)/nrows,[]);
t2 = reshape(permute(t1,[1 3 2]),size(t1,1)*size(t1,3),[]);
t3 = permute(reshape(t2,nele,size(t2,1)/nele,[]),[1 3 2]);
out = reshape(t3,nele,[]);
return;
因此,您将使用原始代码避免所有混乱的嵌套循环。
输入:
输出: