图象的平滑处理(200分)

  • 主题发起人 主题发起人 caowei
  • 开始时间 开始时间
C

caowei

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个大图片上面叠加一个小图象,怎么使小图片的边缘平滑?
请提供具体程序参考....谢谢!
 
用低通滤波!
 
这要看你怎么叠加了;
如果是直接利用Bitblt来实现,BitBlt(…………,SRCCOPY),
将会有明显的边缘,你可以通过模糊边缘来进行平滑处理;
这种模糊算法包括高斯模糊和动感模糊,在《计算机图形学》上有算法。
 
这问题还有讨论价值,大家都伸伸手
 
给你一个高斯模糊算法
type
TScanedData=array[0..255,0..255] of Word;
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..MaxPixelCount] of TRGBTriple;

TFColor = record b,g,r:Byte end;
PFColor =^TFColor;
TLine = array[0..0]of TFColor;
PLine =^TLine;
TPLines = array[0..0]of PLine;
PPLines =^TPLines;

procedure TFastImgProc.SplitBlur(Amount:Integer);//模糊;Amount:0..100
var Lin1,Lin2: PLine; pc: PFColor; cx,x,y: Integer;
Buf: array[0..3]of TFColor;
begin
pc:=Bits;
for y:=0 to Height-1 do begin
Lin1:=Pixels[NormInt(y+Amount,0,Height-1)];
Lin2:=Pixels[NormInt(y-Amount,0,Height-1)];
for x:=0 to Width-1 do begin
cx:=NormInt(x+Amount,0,Width-1); Buf[0]:=Lin1[cx];
Buf[1]:=Lin2[cx]; cx:=NormInt(x-Amount,0,Width-1);
Buf[2]:=Lin1[cx]; Buf[3]:=Lin2[cx];
pc.b:=(Buf[0].b+Buf[1].b+Buf[2].b+Buf[3].b)shr 2;
pc.g:=(Buf[0].g+Buf[1].g+Buf[2].g+Buf[3].g)shr 2;
pc.r:=(Buf[0].r+Buf[1].r+Buf[2].r+Buf[3].r)shr 2;
Inc(pc);
end;
pc:=Ptr(Integer(pc)+Gap);
end;
end;

procedure TFastImgProc.GaussianBlur(Amount:Integer);//高斯模糊;Amount:0..100
var i: Integer;
begin
for i:=Amount downto 1 do SplitBlur(i);
end;


 
如果是已知区域就没有必要在整幅图像范围内进行模糊了,
特别是如果该小图像是矩形,可以仅仅沿着直线边沿进行模糊,
方法是对纵向边沿取线上点水平方向邻近点的均值,
对垂直边沿取线上点取水平方向邻近点的均值。
 
我觉得应该用羽化
 
Not Photo Shop!
 
to varphone:
>> Not PhotoShop

什么意思呀? 大家都在讨论用什么方法, 突然说Not PhotoShop?
 
接受答案了.
 
后退
顶部