百分求灰度图算法改进

问题描述

有点长,可以只看算法部分。功能,实现将xyz导出csv文件,并生成灰度图。缺点,灰度图效果不好,在三维地形中不圆滑,所以在灰度生成中我用了笨的方法让x坐标,y坐标扩展了下。可效果仍然不行。下面是代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.IO;usingSystem.Drawing;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{DataTableData_table;intBmp_width=256;intBmp_height=256;floatminx=0,maxx=0,miny=0,maxy=0;floatx_len=0,y_len=0;floatgray_len=0;intmax_gray=255;publicForm1(){InitializeComponent();Data_table=newDataTable();Data_table.Columns.Add("x");Data_table.Columns.Add("y");Data_table.Columns.Add("z");}privatevoidGenerateBMP(){Bitmapbm=newBitmap(Bmp_width,Bmp_height);for(intinitx=0;initx<Bmp_width;initx++){for(intinity=0;inity<Bmp_height;inity++){bm.SetPixel(initx,inity,Color.FromArgb(255,0,0,0));}}foreach(DataRowdrinData_table.Rows){intgrayvalue=(int)(float.Parse(dr[2].ToString())*(max_gray/gray_len));try{//bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx)),(int)((float.Parse(dr[1].ToString())-miny)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)0.2)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)0.2)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)0.4)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)0.4)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)0.6)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)0.6)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)0.8)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)0.8)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)1)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)1)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)1.2)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)1.2)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)1.4)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)1.4)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)1.6)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)1.6)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)1.8)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)1.8)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx+(float)2)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny+(float)2)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));}catch(Exceptionex){}}bm.Save("E:\test\test1_2.bmp");}privatevoidbutton1_Click(objectsender,EventArgse){max_gray=Int32.Parse(this.textBox_gray.Text);Bmp_width=Int32.Parse(this.Textbox_picwidth.Text);stringpath=@"E:test2013-12-16-11-17-30.xyz";stringpath2=@"E:testpoints.csv";FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read);BinaryReaderbr=newBinaryReader(fs);FileStreamfs2=newFileStream(path2,FileMode.Create,FileAccess.Write);StreamWritersw=newStreamWriter(fs2);Data_table.Rows.Clear();try{floatx;floaty;floatz;stringstr;while(true){x=br.ReadSingle();y=br.ReadSingle();z=br.ReadSingle();if(x>maxx){maxx=x;}if(x<minx){minx=x;}if(y>maxy){maxy=y;}if(y<miny){miny=y;}if(z>gray_len){gray_len=z;}str=x.ToString()+","+y.ToString()+","+z.ToString();sw.WriteLine(str);this.Data_table.Rows.Add(x,y,z);}}catch(IOExceptionex){sw.Close();fs2.Close();MessageBox.Show("Readfilefinished");}x_len=maxx-minx;y_len=maxy-miny;Bmp_height=(int)(Bmp_width*(y_len/x_len)+1);GenerateBMP();}}}

解决方案

解决方案二:
靠,文件和bmp文件还不能传。
解决方案三:
这个是我未进行处理前的图片效果(也就是xyz没有扩展前的)这个是扩展后的。在三维场景中生成后是这样的锯齿太多了
解决方案四:
这种问题,你直接说你的算法都干了些什么就好了,不要让大家帮你分析代码了...导入三维地形,灰度图的灰度值表示的是高度所谓不圆滑,是怎么个效果?
解决方案五:
三维引擎里应该有抗锯齿的设置吧否则你导出的文件分辨率再高,也还是免不了都是离散的点,而不是一个平滑的面.这个跟你如何导出灰度图应该没有关系
解决方案六:
不发不行啊,因为我C#不会,代码是别人写的,我简单的加工了些。主要就是把X,Y,Z坐标导入到数组,因为x的值大约-60到60之间,所以处理了下让当前值减去最小值为基点。有个专门设置Z轴长度的max_gray=Int32.Parse(this.textBox_gray.Text)。目前显示出的这些点太离散了,所以要处理下,我做的就是简单的多画了几条线而已。所以效果也不好。
解决方案七:
上面太啰嗦了可以看这个usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.IO;usingSystem.Drawing;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{DataTableData_table;intBmp_width=256;intBmp_height=256;floatminx=0,maxx=0,miny=0,maxy=0;floatx_len=0,y_len=0;floatgray_len=0;intmax_gray=255;publicForm1(){InitializeComponent();Data_table=newDataTable();Data_table.Columns.Add("x");Data_table.Columns.Add("y");Data_table.Columns.Add("z");}privatevoidGenerateBMP(){Bitmapbm=newBitmap(Bmp_width,Bmp_height);for(intinitx=0;initx<Bmp_width;initx++){for(intinity=0;inity<Bmp_height;inity++){bm.SetPixel(initx,inity,Color.FromArgb(255,0,0,0));}}foreach(DataRowdrinData_table.Rows){intgrayvalue=(int)(float.Parse(dr[2].ToString())*(max_gray/gray_len));try{bm.SetPixel((int)((float.Parse(dr[0].ToString())-minx)*(Bmp_width/x_len)),(int)((float.Parse(dr[1].ToString())-miny)*(Bmp_height/y_len)),Color.FromArgb(255,grayvalue,grayvalue,grayvalue));}catch(Exceptionex){}}bm.Save("E:\test\test1_2.bmp");}privatevoidbutton1_Click(objectsender,EventArgse){max_gray=Int32.Parse(this.textBox_gray.Text);Bmp_width=Int32.Parse(this.Textbox_picwidth.Text);stringpath=@"E:test2013-12-16-11-17-30.xyz";stringpath2=@"E:testpoints.csv";FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read);BinaryReaderbr=newBinaryReader(fs);FileStreamfs2=newFileStream(path2,FileMode.Create,FileAccess.Write);StreamWritersw=newStreamWriter(fs2);Data_table.Rows.Clear();try{floatx;floaty;floatz;stringstr;while(true){x=br.ReadSingle();y=br.ReadSingle();z=br.ReadSingle();if(x>maxx){maxx=x;}if(x<minx){minx=x;}if(y>maxy){maxy=y;}if(y<miny){miny=y;}if(z>gray_len){gray_len=z;}str=x.ToString()+","+y.ToString()+","+z.ToString();sw.WriteLine(str);this.Data_table.Rows.Add(x,y,z);}}catch(IOExceptionex){sw.Close();fs2.Close();MessageBox.Show("Readfilefinished");}x_len=maxx-minx;y_len=maxy-miny;Bmp_height=(int)(Bmp_width*(y_len/x_len)+1);GenerateBMP();}}}
解决方案八:
你想,灰度图能显示的高度范围就是0-255的整数无可避免的会离散要想平滑,不是在导出的数据上做文章,而是要在3d引擎里做平滑处理
解决方案九:
灰度图是整数,而3d里的高度是浮点数灰度图是会损失精度的,这个平滑要在导入3d后,在平滑效果上找回来
解决方案十:
可以用插值算法增加一些采样点。
解决方案十一:
如何采用插值算法增加采样点?我在this.Data_table.Rows.Add(x,y,z);之前做过this.Data_table.Rows.Add(x+1,y+1,z+1);之类的,也是效果不行的

时间: 2024-07-30 20:38:20

百分求灰度图算法改进的相关文章

郁闷,难题,百分求一解决方案.

问题描述 现在假如有两个网站:1.www.A.com/index.html2.www.B.com/index.aspx其中A网站是没有数据库的,现在www.A.com/index.html想通过ajax在本地把一个产品ID号传送到www.B.com/index.aspx网站,然后再把B网站数据库的内容反馈回来,并且在www.A.com/index.html的HTML代码中不能出现B网站的链接.看了一个例子,大概是这样的,在A网站有<script>show("/show.php?pro

matlab-求灰度直方图的最大值和最小值

问题描述 求灰度直方图的最大值和最小值 小白有问题,请问怎么用MATLAB求一幅图的灰度直方图的最大值和最小值? 解决方案 在百度上找到以前大神们的讨论,看了下能解决你的问题,这是链接.http://www.ilovematlab.cn/thread-72503-1-1.html,网上资源还是很多的,书山有路! 解决方案二: 灰度直方图,本意在于统计灰度级概率,你在源程序里加个矩阵,统计每个直方里点数个数,最后sort就知道了

我的Android进阶之旅------&amp;gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai",

格式-C#高色位图怎么转换成1位位图?

问题描述 C#高色位图怎么转换成1位位图? 在windows窗体应用程序中将一张BMP格式的任何位图转换成1位位图. 解决方案 http://www.doc88.com/p-9751909852742.html 解决方案二: 先求灰度值,然后弄个阈值,大于阈值的为1,小于阈值为0.阈值看情况定

《Master Opencv...读书笔记》非刚性人脸跟踪 III

   上篇文章中,我们获得了人脸的各种表情模式,也就是一堆标注点的形变参数.这次我们需要训练一中人脸特征(团块模型),它能够对人脸的不同部位(即"标注点")分别进行描述,作为后面人脸跟踪.表情识别的区分依据.本次博文的主要内容: a.      介绍下人脸特征检测器大概有哪些类别 b.      详细介绍随机梯度法,并介绍在人脸团块特征提取时的应用 c.      为了提高训练/跟踪的健壮性,利用上一讲对输入的图像进行大小.角度的约束   人脸特征检测器综述       人脸特征检测与

应用Visual Studio 2010辅助敏捷测试(上)

敏捷软件开发是近些年来比较热门的话题,<敏捷宣言>四条主要精神和十二条基本准则概括了敏捷开发的基本思想.围绕着这些基本概念和思想,产生了一系列的轻量级方法,如:极限编程.测试驱动开发.Scrum.特性驱动开发等.虽然具体名称.过程和侧重点不尽相同,但是相对于非敏捷的开发方法而言,它们都更强调面对面的沟通.团队不同角色之间的紧密协作.频繁交付新的可用的软件版本.紧凑而自我组织型的团队等.敏捷开发只是提供了一个思想和方法论,而要在实际的工程中正确运用它,并真正显现出它的优点和产生实际的效果,这对于

《SEM长尾搜索营销策略解密》一一2.12 宝洁里的长尾与创新

2.12 宝洁里的长尾与创新 "您理想中的黑发是什么?" "具有生命力的黑发."一位消费者如是说. "您进一步的心理感受是什么?" "我就像一颗钻石,只是蒙上了尘埃,只要将她擦亮,就可以让钻石发出光芒."有消费者这样说. 这是1997年宝洁公司在中国酝酿一个新的润发产品"润妍"时,对300名消费者进行产品概念测试的一场现场调查.按照宝洁公司的惯例,新产品在研制开发之前,首先要找准目标消费者的真正需求,研究

2013移动端视频市场分析报告:土豆APP居好评榜首位

8月14日,速途研究院发布了<2013移动端视频市场分析报告>.报告指出, 2013上半年,中国国内信息消费规模达2.07亿元,移动互联网用户月均移动流量达到122.8M, 同比增长36.6%,移动互联网流量收入增长55.8%.报告分析,移动端视频市场将呈现迅速增长态势,也必将成为最新主流.报告对移动视频用户特征.视频客户端下载量及好评度.视频行业搜索热词等多个维度进行了立体分析,其中土豆移动端表现优异,居好评榜首位,"视频行业热词搜索榜" 中"火影忍者"

一起谈.NET技术,应用Visual Studio 2010辅助敏捷测试(上)

敏捷软件开发是近些年来比较热门的话题,<敏捷宣言>四条主要精神和十二条基本准则概括了敏捷开发的基本思想.围绕着这些基本概念和思想,产生了一系列的轻量级方法,如:极限编程.测试驱动开发.Scrum.特性驱动开发等.虽然具体名称.过程和侧重点不尽相同,但是相对于非敏捷的开发方法而言,它们都更强调面对面的沟通.团队不同角色之间的紧密协作.频繁交付新的可用的软件版本.紧凑而自我组织型的团队等.敏捷开发只是提供了一个思想和方法论,而要在实际的工程中正确运用它,并真正显现出它的优点和产生实际的效果,这对于