除了全部家当奉上(300分)以外,还有惊喜大奖送上-------图像系列问题-------讨论有分,欢迎灌水。。 (100分)

  • 主题发起人 主题发起人 szchengyu
  • 开始时间 开始时间
S

szchengyu

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟被迫进入图像处理的领域不久,一切都无从下手。
这个问题困扰了近一个星期了,不光是老板生气,我都气不顺 > -:()

能帮助我解决的朋友在下没齿不忘,如果是MM帮我,并且你不嫌弃,我以身相许:)

以下代码是从VC 中转出来的,原意是中值滤波(MedianFilter),但好像有点不对,
老是出错(不是一定出),检查了很久都不知道是怎么回事?

// 用冒泡法排序,取给定一维数组(bArray)的中值,
function GetMedianNum(bArray: array of Byte; Len: integer): Byte;
var
i, j: integer;
temp: byte;
begin
// 冒泡法排序
for j := 0 to Len - 1 do
begin
for i := 0 to Len - j - 1 do
begin
if bArray > bArray[i + 1] then
begin
temp := bArray;
bArray := bArray[i + 1];
bArray[i + 1] := temp;
end;
end;
end;

// 如果给定数组的个数为奇数,取最中间一个
if (Len and 1) > 0 then
result := bArray[(Len + 1) div 2]
else
// 如果给定数组的个数为偶数,取中间两个数的平均
result := (bArray[Len div 2] + bArray[Len div 2 + 1]) div 2;
end;

// 针对256色图
procedure MedianFilter(bmp: TBitmap; w, h, iFw, iFh, iFx, iFy: integer);
// bmp : 需要滤波的位图,
// w, h: 需要滤波的宽度和高度
// iFw, iFh: 给定模板的宽度和高度
// iFx, iFy: 给定模板的中心坐标
var
aValue: array of Byte; // 模板数组
i, j, m, n: integer;
ps, pd: PByteArray;
bmpTemp: TBitmap;
begin
bmpTemp := TBitmap.Create;
bmpTemp.Assign(bmp);
SetLength(aValue, iFh * iFw);
for i := iFy to h - iFh + iFy do
begin
pd := bmp.ScanLine;
for j := iFx to w - iFw + iFx do
begin
for m := 0 to iFh - 1 do
begin
ps := bmpTemp.ScanLine[i - iFy + m];
for n := 0 to iFw - 1 do
aValue[m * iFw + n] := ps[j - iFx + n]; // 常出错处,
// 一般是在一行的最后一列(当然已经考虑到越界而没处理边界),
end;

pd[j] := GetMedianNum(aValue, iFh * iFw);
end;
end;
bmpTemp.Free;
aValue := nil;
end;

我是这样调用的:
MedianFilter(Image1.Picture.Bitmap,
Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height,
3, 3, 1, 1);
// 对 Image1.Picture.Bitmap 进行中值滤波,模板为 3*3, 中心在中点,坐标为 (1, 1);
 
卷大侠,帮帮我吧
 
唉。。。。。。。。。。。。。。。。。
 
有人愿帮帮我吗?
 
有没有人哪?

我每天UP一下,不要让我等到花儿也谢了。
 
我试了一下,怎么没反映呀
 
热烈欢迎左右手,你是第一个说话的人,
是要求256色图像,应该有反映呀,至少会报错呀:)
 
我很菜,只能帮你提前一下帖子了
 
我又试了一下,是用的256颜色的图象,但是还是没反映,我看不出有什么变化。而且也不出错。
 
左右手:
给我个邮箱,我给你发我出错的全部程序,帮我看看,OK?
 
可惜我不会,帮你提前!
 
你不把程序当中的一些参数说明一下,人家怎么会愿意看呢!
 
哎,还是我来帮你看一下好了 activer@yeah.net
(如果今天下午我们办公室还没有电,我也只能说sorry)
 
帮你提前 !现在没时间研究,不好意思!
 
>>aValue[m * iFw + n] := ps[j - iFx + n]; // 常出错处,
把这句改一下:
aValue[m * iFw + n] := ps[(j - iFx + n)*3];
图形方面的小问题就找我好了,无需劳驾大卷。
嘿嘿,以后发年终奖的时候要记得给我发点零花钱~!
 
OK,多谢Activer指点
 
Activer:

我已经将问题的注释加上了.

>> aValue[m * iFw + n] := ps[(j - iFx + n)*3];
这是256位图呀?!
 
Activer:

邮件已经发给,谢谢
 
sorry没有看仔细,我还以为是16位色的.
我这里还是没有来电。
 
不用怕,大不了重新写一个。我有源代码,如果真不行,我去把源代码找出来。
 
后退
顶部