代码实现将模糊图象变清晰的问题。求助!

lainpo 2005-04-28 09:59:30
代码实现将模糊图象变清晰的问题。求助!
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lainpo 2005-04-28
  • 打赏
  • 举报
回复
没有人来,自己先顶顶!
lainpo 2005-04-28
  • 打赏
  • 举报
回复
在delphi报表中可不可以将图片打印的接近与Acdsee的清晰度?谢谢各位大侠小侠!
S.F. 2005-04-28
  • 打赏
  • 举报
回复
同意extcsdn ,使用锐化算法

uses math;

procedure TForm1.Button2Click(Sender: TObject);
var
bmp1, bmp2: Tbitmap;
p1, p2, p3, p4: pbytearray;
//定义四个pbytearray类型变量
i, j, z: integer;
y: array[0..8] of integer;
begin
y[0] := 0; y[1] := -1; y[2] := 0;
y[3] := -1; y[4] := 5; y[5] := -1;
y[6] := 0; y[5] := -1; y[8] := 0;
//卷积矩阵
z := 1;
//卷积核
bmp1 := Tbitmap.Create;
bmp2 := Tbitmap.Create;
bmp1.Assign(image1.Picture.Bitmap);
bmp1.PixelFormat := pf24bit;
//24为格式便于处理
bmp1.Width := image1.Picture.Graphic.Width;
bmp1.Height := image1.Picture.Graphic.Height;
bmp2.Assign(bmp1);
//备用的位图
bmp2.PixelFormat := pf24bit;
for j := 1 to bmp1.Height - 2 do
begin
p1 := bmp1.ScanLine[j];
//第一条扫描线
p2 := bmp2.ScanLine[j - 1];
//第二条扫描线,为了防止数据变化,在备用位图上操作
p3 := bmp2.ScanLine[j];
p4 := bmp2.ScanLine[j + 1];
//第三条扫描线
//三条相邻的扫描线
for i := 1 to bmp1.Width - 2 do
begin
//进行卷积操作获取新的象素值
p1[3 * i + 2] := min(255, max(0, ((y[0] * p2[3 * (i - 1) + 2]
+
y[1] * p2[3 * i + 2] + y[2] * p2[3 * (i + 1) + 2] + y[3]
* p3[3
* (i - 1)
+ 2] + y[4] * p3[3 * i + 2] + y[5] * p3[3 * (i + 1) +
2] +
y[6]
* p4[3
* (i - 1) + 2] + y[5] * p4[3 * i + 2] + y[8] * p4[3 * (i
+
1) + 2]))
div
z));
//重新算出红色分量
p1[3 * i + 1] := min(255, max(0, ((y[0] * p2[3 * (i - 1) + 1]
+
y[1] * p2[3 * i + 1] + y[2] * p2[3 * (i + 1) + 1] + y[3]
* p3[3
* (i - 1)
+ 1] + y[4] * p3[3 * i + 1] + y[5] * p3[3 * (i + 1) +
1] +
y[6]
* p4[3
* (i - 1) + 1] + y[5] * p4[3 * i + 1] + y[8] * p4[3 * (i
+
1) + 1]))
div
z));
//重新算出蓝色分量
p1[3 * i] := min(255, max(0, ((y[0] * p2[3 * (i - 1)] + y[1]
*
p2[3 * i] + y[2] * p2[3 * (i + 1)] + y[3] * p3[3 * (i -
1)] +
y[4] * p3[3
* i] + y[5] * p3[3 * (i + 1)] + y[6] * p4[3 * (i - 1)] +
y[5]
* p4[3 * i]
+ y[8] * p4[3 * (i + 1)])) div z));
//重新算出绿色分量
end;
end;
Image2.Picture.Bitmap.Assign(Bmp1);
//重新显示
Image2.Invalidate;
Bmp1.Free;
bmp2.Free;
//释放资源
end;
Rex_love_Burger 2005-04-28
  • 打赏
  • 举报
回复
锐化
constantine 2005-04-28
  • 打赏
  • 举报
回复
不可能的,信息已经损失了
xzhifei 2005-04-28
  • 打赏
  • 举报
回复



这是不可能的,哈哈哈
XINGXIMU 2005-04-28
  • 打赏
  • 举报
回复
可以试试图像的平滑和滤波
下面时平滑的例子
var
bmp1, bmp2: Tbitmap;
p1, p2, p3, p4: pbytearray;
i, j, z: integer;
y: array[0..8] of integer;
begin
y[0] := 1;
y[1] := 2;
y[2] := 1;
y[3] := 2;
y[4] := 4;
y[5] := 2;
y[6] := 1;
y[7] := 2;
y[8] := 1;
z := 16;
bmp1 := Tbitmap.Create;
bmp2 := Tbitmap.Create;
bmp1.Assign(image1.Picture.Bitmap);
bmp1.PixelFormat := pf24bit;
bmp1.Width := image1.Picture.Graphic.Width;
bmp1.Height := image1.Picture.Graphic.Height;
bmp2.Assign(bmp1);
bmp2.PixelFormat := pf24bit;
for j := 1 to bmp1.Height - 2 do
begin
p1 := bmp1.ScanLine[j];
p2 := bmp2.ScanLine[j - 1];
p3 := bmp2.ScanLine[j];
p4 := bmp2.ScanLine[j + 1];
for i := 1 to bmp1.Width - 2 do
begin
p1[3 * i + 2] := min(255, max(0, ((y[0] * p2[3 * (i - 1) + 2]
+
y[1] * p2[3 * i + 2] + y[2] * p2[3 * (i + 1) + 2] + y[3]
* p3[3
* (i - 1)
+ 2] + y[4] * p3[3 * i + 2] + y[5] * p3[3 * (i + 1) +
2] +
y[6]
* p4[3
* (i - 1) + 2] + y[7] * p4[3 * i + 2] + y[8] * p4[3 * (i
+
1) + 2]))
div
z));
p1[3 * i + 1] := min(255, max(0, ((y[0] * p2[3 * (i - 1) + 1]
+
y[1] * p2[3 * i + 1] + y[2] * p2[3 * (i + 1) + 1] + y[3]
* p3[3
* (i - 1)
+ 1] + y[4] * p3[3 * i + 1] + y[5] * p3[3 * (i + 1) +
1] +
y[6]
* p4[3
* (i - 1) + 1] + y[7] * p4[3 * i + 1] + y[8] * p4[3 * (i
+
1) + 1]))
div
z));
p1[3 * i] := min(255, max(0, ((y[0] * p2[3 * (i - 1)] + y[1]
*
p2[3 * i] + y[2] * p2[3 * (i + 1)] + y[3] * p3[3 * (i -
1)] +
y[4] * p3[3
* i] + y[5] * p3[3 * (i + 1)] + y[6] * p4[3 * (i - 1)] +
y[7]
* p4[3 * i]
+ y[8] * p4[3 * (i + 1)])) div z));
end;
end;
Image2.Picture.Bitmap.Assign(Bmp1);
Image2.Invalidate;
Bmp1.Free;
bmp2.Free;
end;
lainpo 2005-04-28
  • 打赏
  • 举报
回复
标题写错了,是将模糊图片变清晰的问题。谢谢!
fengzhengren 2005-04-28
  • 打赏
  • 举报
回复
这是一个比较通用的方法,有一定效果,但不会最好,最好的方法是知道造成模糊的原因,比如是运动模糊,就得用运动模糊校正方法进行校正.
fengzhengren 2005-04-28
  • 打赏
  • 举报
回复
也就是使你低于某象素值的点的象素值减去一个数,高于某象素值的点的加上一个数。
fengzhengren 2005-04-28
  • 打赏
  • 举报
回复
可以增加对比度。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧