程序255 发表于 2007-4-18 09:11

中值滤波的问题

我的是车型自动识别,哪位有更好的去燥程序 可以分享一下不?

[ 本帖最后由 eight 于 2007-4-20 16:47 编辑 ]

eight 发表于 2007-4-18 10:41

原帖由 程序255 于 2007-4-18 09:11 发表
我的是车型自动识别 ,有更好的去燥程序 可以分享一下不


中值滤波函数 median:


>> x=
x =
   0   6    13
    11   4    20
>> median(x,2)
ans =
   6
    11

程序255 发表于 2007-4-18 23:16

我的执行不下去

J = hw7_b(dd, 3*3);

figure,imshow(~J);

函数的程序如下 :
function = 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);
= 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 编辑 ]

eight 发表于 2007-4-18 23:53

原帖由 程序255 于 2007-4-18 23:16 发表
J = hw7_b(dd, 3*3);

figure,imshow(~J);

函数的程序如下 :
function= hw7_b(file_name, block_size)

EE 8541 HW 1 问题#7b 执行中间过滤器在灰色图象由file_name 给。在大小块的工作block_size ...


median 函数你看看我举的例子就知道如何使用。另外,你的程序太复杂,我精力有限,无法帮你细看,而且你没有提供数据文件,我无法运行。请参阅置顶贴:聚宝盆 把具体出错代码、出错信息贴上来,要不你重新编辑自己的帖子,把图片传上来

[ 本帖最后由 eight 于 2007-4-18 23:56 编辑 ]

程序255 发表于 2007-4-19 09:57

急救!!!!!处理还不如不处理

大家 看看 我的两幅图 第一幅 是减去背景后的二值图 第二幅是中值滤波去噪后 我想保留汽车顶部那完美曲线 ,高手指点下怎样才能把顶部的曲线连贯起来我是没辙拉





[ 本帖最后由 eight 于 2007-4-19 10:15 编辑 ]

程序255 发表于 2007-4-19 11:02

我是新手 以后会注意的 给你添麻烦了

程序255 发表于 2007-4-20 10:13

图象处理高手给个建议吧 能适用大多情况的方案

大侠 看看 车的右上部分 那些 不连续的线条 怎么能让它连续了我处理的时候 当噪声给抹掉 了

程序255 发表于 2007-4-20 16:21

eight看看是怎么回事

A=imread('1.tif');
I=rgb2gray(A);


B=imread('2.tif');
J=rgb2gray(B);

C=imsubtract(A,B);
imshow(C);
D=medfilt2(C,);
figure;
imshow(D);


错误提示:??? Error using ==> images\private\checkinput>check_attributes
Function ORDFILT2 expected its first input argument, A,
to be two-dimensional.

Error in ==> images\private\checkinput at 37
check_attributes(A, attributes, function_name, variable_name, ...

Error in ==> ordfilt2>ParseInputs at 135
checkinput(A, {'numeric','logical'}, {'2d','real'}, mfilename, 'A', 1);

Error in ==> ordfilt2 at 51
= ParseInputs(varargin{:});

Error in ==> medfilt2 at 53
    b = ordfilt2(a, order, domain, padopt);

Error in ==> zhuxiaoxia at 10
D=medfilt2(C,);

eight 发表于 2007-4-20 16:45

C=imsubtract(A,B);

改为:

C=imsubtract(I,J);

试试。估计你的原图是RGB的(对应的图象数据是三维矩阵),但是 medfilt2 函数的输入只能是二维矩阵

程序255 发表于 2007-4-20 18:27

:victory:万能啊 哈哈

程序255 发表于 2007-4-20 18:32

大侠 出个主意吧

车子在图中位置,如果车子在其中的位置改变的话 ,有没有什么方法可以把这两个图中车子部分的图象相加而成为一个车子的图象啊

eight 发表于 2007-4-20 18:37

原帖由 程序255 于 2007-4-20 18:32 发表 http://forum.vibunion.com/forum/images/common/back.gif
24762车子在图中位置,如果车子在其中的位置改变的话 ,有没有什么方法可以把这两个图中车子部分的图象相加而成为一个车子的图象啊


可以考虑通过某些特征来定位,例如质心、轮廓等

程序255 发表于 2007-4-20 23:23

有眉目了 给几个函数 或者说我应该看什么书

真是太感谢你了

程序255 发表于 2007-4-21 22:48

eight 到底有没有这方面的函数啊

:'( 急 急 急 :'(

eight 发表于 2007-4-21 23:12

原帖由 程序255 于 2007-4-21 22:48 发表
:'( 急 急 急 :'(

看看matlab关于图像处理方面的书籍吧,或者找找matlab的帮助(Image Processing Toolbox),我也不太懂


ps:质心的程序不难写吧?求出后,把两者平移到同一个位置不就ok了吗
页: [1] 2 3
查看完整版本: 中值滤波的问题