使用matlab对图像的平均滤波器进行误差

时间:2014-11-12 05:46:01

标签: image matlab matlab-figure

我需要使用盒式平均滤波器来缩小图像尺寸,我尝试编写此代码但是出现了错误: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)

1 个答案:

答案 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;

因此,您将使用原始代码避免所有混乱的嵌套循环。

输入:

enter image description here

输出:

enter image description here