24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3005  |  回复: 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的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

雷小雨

银虫 (著名写手)

★ ★ ★
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的回帖
普通回帖

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的回帖

yibanxinyu

铜虫 (小有名气)

引用回帖:
Originally posted by holmescn at 2010-04-27 10:32:48:
我可以尝试一下。不过,有deadline吗?因为我的课程也比较紧。不是每天都能coding阿。

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

另外:
1、只考虑3X3矩阵是不是说只给出关键代码就可以了 ...

六月之前就好啦~呵呵~只要关键代码就可以啦~只要能编出来就好啦,不管什么方法的,如果编出来,我愿把剩下的所有金币都给你~
5楼2010-04-27 20:59:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dy_306

金虫 (正式写手)


resonant(金币+1):给点定金:-)能给个解决方案?欢迎讨论 2010-04-30 20:08
这用matlab容易实现吧
6楼2010-04-30 20:00:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dy_306

金虫 (正式写手)


resonant(金币+1):俺不懂图像处理。但是很感谢朋友没有空发议论。把自己的想法分享出来,才能让彼此都有进步的空间:-)谢谢,学习了。 2010-04-30 20:42
yibanxinyu(金币+1): 2010-05-03 21:21
定义一个和原图像同样大小的矩阵,然后将处理好的每一个像素赋值到新矩阵中就可以了。实现过程用二重循环,将模板在原图像覆盖一遍。
“将这5个像素的均值替换原来的像素值”可以对中心像素的八领域均减去中心像素的灰度,取绝对值后排序找到最小的五个对应的原像素,然后取均值~~
这是我思路~不妥之处望指出~~
7楼2010-04-30 20:38:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wujun604

金虫 (初入文坛)


resonant(金币+1):谢谢参与,已属于老帖子,估计楼主已经解决了。 2010-08-11 12:08:48
yibanxinyu(金币+2): 2010-08-14 19:44:35
将每个邻域的灰度值和模板中心灰度值想减取绝对值(度量距离),对距离进行排序,取前五个。然后相加取平均就可以了。
9楼2010-08-11 11:50:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

潜龙伏虎

银虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖
抱歉,这个真不懂怎么做呀!
10楼2011-11-30 23:24:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yibanxinyu 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见