24小时热门版块排行榜    

查看: 3098  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

yibanxinyu

铜虫 (小有名气)

[交流] 【求助】帮我编个程啊~C语言,C++,Matlab,VB...都行~ 已有4人参与

拜托各位编程高手帮我编个程啊,高金币悬赏哦~是关于图像处理的,用C语言,C++,Matlab,VB等等都行。
  编写处理“K近邻平滑滤波”的程序,原理是:以待处理的像素作为中心,取一个3X3的模板,在模板中选择5个与待处理像素的值最接近的像素,将这5个像素的均值替换原来的像素值。
  举个直观的例子吧,给定3X3的模板如下:
2   2   3
6   8   7                  (6+7+5+6+8)/5=6.4=6(四舍五入)
5   6   8
   最后中心像素值8被6替换。
  编程的时候不要用具体的像素值,用代号(比如说a、b、c......)代替就好了。
  多谢各位高手了,小女感激不尽啊!

[ Last edited by yibanxinyu on 2010-4-25 at 20:37 ]
回复此楼

» 收录本帖的淘帖专辑推荐

学海无涯!

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

雷小雨

银虫 (著名写手)

★ ★ ★
resonant(金币+3):感谢提供:-) 2010-05-02 13:06
yibanxinyu(金币+5):非常感谢~ 2010-05-03 21:18
% K近邻平滑滤波
% input - 输入图像矩阵;n - 模板大小(3,5,7...);k - 近邻数
% output - 滤波处理后的图像矩阵
function output = emuchKNNMeanFilter(input, n, k)
    [row, col] = size(input);
    edgeWidth = floor(n / 2);
    output = zeros(row - edgeWidth * 2, col - edgeWidth * 2);
    for i = 1 + edgeWidth : row - edgeWidth
        for j = 1 + edgeWidth : col - edgeWidth
            mask = input(i - edgeWidth : i + edgeWidth,...
                j - edgeWidth : j + edgeWidth);
            center = input(i, j);
            vertex = Matrix2Vertex(mask);
            neighbour = GetNeighbour(vertex, center, k);
            output(i - 1, j - 1) = mean(neighbour);
        end
    end
end

% 根据输入的向量与中心值取近邻值
% vertex - 输入向量;center - 中心值;k - 近邻数
% neighbour - 近邻值
function neighbour = GetNeighbour(vertex, center, k)
    distance = abs(vertex - center);
    [sortDistance, sortIndex] = sort(distance,1);
    neighbour = vertex(sortIndex(2 : k + 1));
end

% 将矩阵转换为向量
function vertex = Matrix2Vertex(matrix)
    [row, col] = size(matrix);
    vertex = zeros(row * col, 1);
    for i = 1 : row * col
        vertex(i) = matrix(i);
    end
end

思路与7楼一致
调用方法:
将以上代码存为文件emuchKNNMeanFilter.m,在matlab command window中调用。
例如,有矩阵
a =
164        24        196        119        209        51
200        139        53        23        250        244
125        218        11        129        247        86
103        67        39        20        147        38
224        198        183        42        60        84
181        163        33        191        74        29
211        185        56        85        172        197
3        228        116        78        146        202
调用程序进行处理:b = emuchKNNMeanFilter(a, 3, 5)
得到处理后的矩阵
b =
180.6        61.2        101.6        189.6
126.8        40.4        56.4        171.2
92.2        53.8        56.2        121.2
170.8        132.2        45.2        53.4
191.6        105.8        114.8        60
179.8        95        71.4        164.2
8楼2010-05-02 13:03:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yibanxinyu 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见