J = hw7_b(dd, 3*3);
figure,imshow(~J);
函数的程序如下 :
function [B] = hw7_b(file_name, block_size)
EE 8541 HW 1 问题#7b 执行中间过滤器在灰色图象由file_name 给。在大小块的工作block_size x block_size (3x3 、5x5, 9x9) 。 我们假设block_size 是奇怪的。
A = imread(file_name);
[m,n] = size(A); 我们需要能应用中间过滤器在界限映像点。 % 假设图象有Neumann 边界条件。 % 最容易的方式处理这将设定有的矩阵A2 % 原始的图象A 在中心和拷贝毗邻 % 映像点价值在边缘附近。
k = floor(block_size/2); 多远我们需要扩大疆界
A2 = zeros(m+2*k,n+2*k);
A2(k+1:m+k,k+1:n+k) = A; 原始的图象在中心。 延伸疆界映像点。 首先处理4 个角落。
A2(1:k,1:k) = A(1,1); 上部左角落
A2(1:k,n+k+1:n+2*k) = A(1,n); 右上角
A2(m+k+1:m+2*k,n+k+1:n+2*k) = A(m,n); 右下角
A2(m+k+1:m+2*k,1:k) = A(m,1); 左下角落。
处理边, 我们需要复制1 row/column 一次。
for i = 1:k
A2(i,k+1:n+k) = A(1,1:n); 上部。 。
A2(k+1:m+k,n+k+i) = A(1:m,n); 权利
A2(m+k+i,k+1:n+k) = A(m,1:n); 更低。
A2(k+1:m+k,i) = A(1:m,1); 左。
end;
翻译结果
向形式矩阵B 应用中间过滤器。
B=zeros(m,n);
pixel_block = zeros(1,block_size^2);
for i = 1:m
for j = 1:n
确定映像点块
k = floor(block_size/2);
pixel_block = reshape(A2(i:i+2*k,j:j+2*k),block_size^2,1);
发现中点没有使用中间作用
sorted_block = sort(pixel_block);
median_position = ceil(block_size^2 / 2);
block_median = sorted_block (median_position);
B(i,j) = block_median;
end;
end;
B = uint8(B); 为图画目的。 这是个中值滤拨的函数,你看我哪用的不对 ,你说的那个median(x,2)我怎么改下才能用上 我的要处理的是一幅很大的图象
[ 本帖最后由 eight 于 2007-4-18 23:48 编辑 ] |