24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3001  |  回复: 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的回帖
查看全部 15 个回答

holmescn

金虫 (正式写手)

★ ★
resonant(金币+2):感谢回帖交流:-) 2010-04-26 18:05
yibanxinyu(金币+2): 2010-04-26 20:51
貌似不难。不过有几个问题:
1、总图像有多大。(以估算计算量)
2、怎样选取最接近的像素。
3、为什么只有中心的8被替换?不是6 7 5 6 8这五个像素都被替换?
2楼2010-04-26 17:17:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yibanxinyu

铜虫 (小有名气)

jjdg:直接pm会更快获得答案! 2010-04-27 02:51
引用回帖:
Originally posted by holmescn at 2010-04-26 17:17:30:
貌似不难。不过有几个问题:
1、总图像有多大。(以估算计算量)
2、怎样选取最接近的像素。
3、为什么只有中心的8被替换?不是6 7 5 6 8这五个像素都被替换?

先谢谢你的捧场啊~这个程序只要针对一个3X3的模板来编程就好了,不用管总图像的大小的。至于怎样选取最接近的像素,我的想法是用其他8个像素值与中心像素值作差,然后再将差值排序,从而可以选出最接近的5个值,不知道高手有没有更好地方法呢?最后一个问题嘛,这个方法的原理就是这样的,只替换中心像素值,呵呵~
你能帮我编这个程序吗?感激不尽啊~
3楼2010-04-26 20:49:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★
resonant(金币+1):有心才是最重要的。感谢参与交流。 2010-04-27 12:07
wangen994(金币+2):活动期间额外奖励 2010-04-27 20:39
yibanxinyu(金币+2): 2010-04-27 20:54
我可以尝试一下。不过,有deadline吗?因为我的课程也比较紧。不是每天都能coding阿。

而且我也不是CS专业的……每天coding只能是梦想了……

另外:
1、只考虑3X3矩阵是不是说只给出关键代码就可以了?其他部分你自己实现吗?
还是需要全部的,可以装载某一个图形的。

2、不用给一个GUI界面吧?我可以写一个CUI界面的。这样简单一点。

[ Last edited by holmescn on 2010-4-27 at 12:53 ]
4楼2010-04-27 10:32:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见