C# WinForm 如何消除图像的“锯齿”???

ivanho 2011-02-16 10:08:32
问题是这样的:

用图像采集卡采集到的图像,不尽如意。所以想对图像进行加工处理!

采集到的图像都产生锯齿,在PS里对图片进行“奇,偶”行插值或复制处理后,就但到了预想的效杲


所以反思:C#里可有对图像有类似的方法操作。。。(主要的是想对图像“奇,偶”行插值或复制处理)


望高手帮帮忙。。。无尽感激!!!
...全文
1228 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-02-23
  • 打赏
  • 举报
回复 1
[Quote=引用 10 楼 ivanho 的回复:]

清楚的描述一下PhotoShop里的操作是:

对图片的“奇行”或“偶行”进行清除,然合选择对图片进行“逐行复制”或“逐行插值”!!

不知道C#是否能够实现。。。


还望各高手们帮帮忙。。。
[/Quote]

2楼的代码基本已经很清楚了,遍历了每一个像素点,你要什么效果,自己写一个算法不就好了
jimh 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 carpathia 的回复:]

不需要,你可以从2个方面进行优化。
1.硬件:调整摄像机快门速度
2.软件:转化为场图,将图像抽行处理,比如704*576图像,图像进行抽行,将单数行RGB数据全部删除,则图像转变为704*288的场图像,然后进行强行放大为704*576,则锯齿基本消除
我简单给你写了一个,你看一下吧

Bitmap bit = new Bitmap("d:/1007.jpg");
……
[/Quote]

这里有抽取行,但插值不好,直接把偶数行覆盖在奇数行上,应该这样处理:
把奇数行相邻的两个偶数行取平均值,然后覆盖到奇数行上,这样就可以消除锯齿,效果应该还可以。
ivanho 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 carpathia 的回复:]
我这里测试了可以抽调行,你的是高清图片吧?放大看对比一下会比较明显
[/Quote]

反复想了一下代码原理,兄弟的意思是将行复制。但是在没有把行清除或置空的基础上,所以还是有锯齿的存在
zhushoudong 2011-02-23
  • 打赏
  • 举报
回复
学习了 貌视有ps的组件进行开发的
wangyue4 2011-02-17
  • 打赏
  • 举报
回复
//创建一个Graphics对象
Graphics grp = CreateGraphics();
//设置抗锯齿
grp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
能稍微改善点

Carpathia 2011-02-17
  • 打赏
  • 举报
回复
不需要,你可以从2个方面进行优化。
1.硬件:调整摄像机快门速度
2.软件:转化为场图,将图像抽行处理,比如704*576图像,图像进行抽行,将单数行RGB数据全部删除,则图像转变为704*288的场图像,然后进行强行放大为704*576,则锯齿基本消除
我简单给你写了一个,你看一下吧

Bitmap bit = new Bitmap("d:/1007.jpg");
int nLength = bit.Width * bit.Height * 3;//图像数据为24位RGB数据
BitmapData bData = bit.LockBits(new Rectangle(0, 0, bit.Width, bit.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//锁定图像数据为可编辑
byte[] buffer = new byte[nLength];//声明一个图像数据数组用来保存
Marshal.Copy(bData.Scan0, buffer, 0, nLength);//将图像数据拷贝出来以便编辑
for (int i = 0; i <bit.Height ; i+=2)//因为是抽行,所以偶数行据进行循环
{
Array.Copy(buffer, i* bit.Width * 3, buffer, (i+1) * bit.Width * 3, bit.Width * 3);//将奇数行拷贝到偶数行
}
Marshal.Copy(buffer, 0, bData.Scan0, nLength);//复制行完成,拷贝回图像指针
bit.UnlockBits(bData);//解锁保存
bit.Save("d:/10072.jpg",ImageFormat.Jpeg);
bit.Dispose();
Carpathia 2011-02-17
  • 打赏
  • 举报
回复
我这里测试了可以抽调行,你的是高清图片吧?放大看对比一下会比较明显
ivanho 2011-02-17
  • 打赏
  • 举报
回复
试了改写程序,效果不大好...

总觉得没把"奇,偶"行其中一种清除掉,再插值的话,图片的效果不会太好的
ivanho 2011-02-17
  • 打赏
  • 举报
回复
清楚的描述一下PhotoShop里的操作是:

对图片的“奇行”或“偶行”进行清除,然合选择对图片进行“逐行复制”或“逐行插值”!!

不知道C#是否能够实现。。。


还望各高手们帮帮忙。。。
ivanho 2011-02-16
  • 打赏
  • 举报
回复
补充一下:“e.Graphics.SmoothingMode =
System.Drawing.Drawing2D.SmoothingMode.None;”

这几种只是针对直线的“消除锯齿”

并不是对复杂图像的“模糊和锐化”
ivanho 2011-02-16
  • 打赏
  • 举报
回复
sp1234 兄:

对,我其实就是想要“模糊和锐化的组合”
  • 打赏
  • 举报
回复
但是不知道你所说的锯齿是否就是这种锯齿。或许你说的是模糊和锐化的组合?
ivanho 2011-02-16
  • 打赏
  • 举报
回复
看了二楼的回复,那三个在址都是一些收费软件,而且不太合用,我目前想要解决的是如何消除图像的锯齿
ivanho 2011-02-16
  • 打赏
  • 举报
回复
刚才略略看了一下,楼上提供的地址,可惜里边没有阐说到“图像插值”,或“消除锯齿”方面的。还是没能解决。。。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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