科学网

 找回密码
  注册

tag 标签: 分割

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

使用DAMBE对蛋白编码基因按密码子位置进行分割
热度 1 Bearjazz 2014-5-7 21:15
使用 DAMBE 对蛋白编码基因按密码子位置进行分割 # 作者信息 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan@126.com http://blog.sciencenet.cn/u/Bearjazz # 前言 蛋白质编码基因因为简并密码子的关系,使得三个密码子位置上的碱基进化速率存在差异,尤其是第三位密码子碱基。因此构建系统进化树之前常常需要按照密码子位置对基因进行分割,从而得到包含不同密码子位置碱基的数据集。下面简单介绍如何使用软件 DAMBE 进行分割操作 # 使用方法 首先当然是比对好序列,并通过翻译成蛋白质的方法对基因进行核对 保存比对好的序列之后,导入 DAMBE ,注意选择基因类型和密码子表类型 在 sequences 选项中选择你要提取的序列位置 然后另存为其它文件即可 呵呵,真是不说不知道…… 就这么简单,祝您科研愉快!
个人分类: 我的研究|7889 次阅读|1 个评论
学生怎样处理导师的学术思想?
热度 5 Greg66 2013-7-19 18:05
过去听说过这样的事情,学生用了导师未发表的学术思想或者草稿,发表了文章、创造了专利等成果,或者把导师的这些东西写在自己的毕业论文中,导师有意见,闹起师生争端。甚至导致学生参评奖学金等导师不签字、不同意申报的情况。 导师对此有意见是可以理解的。导师毕竟在他的领域中研究时间长,思考问题深,会有不少深入想法。同时导师也会谨慎写文章,不十分成熟的想法可能不会轻易发表文章(现在好了,可以先写在博客上)。在成熟之前,他会有很多的思想乃至手稿,指导学生的时候也会讲解。此时学生如果拿去发表,导师有意见,我觉得可以理解,这可能会打乱导师的计划。 此时,学生的做法应该是,征求导师意见或征得导师的同意,毕竟在你的研究团队,你的导师是领导。如果思想成熟了,学生写了文章,作者排序应该尊重导师的意见。写,只是执笔而已,所用的思想、材料等,可能来自导师、团队的其他成员,执笔人应该分割清楚哪些是自己的哪些是别人的。 在学术上,导师是学生的指导人不错,但导师和学生是两个独立的人,观点也是独立的,虽然相互有启发。学生至少应该把导师的思想、文献乃至手稿作为参考文献(我国的期刊非要求正式出版物才能作为参考文献,实际有点荒唐)。 学生也不用发愁自己没思想、写不出好文章,当研究生只是万里长征第一步,好的思想和成果在于自己的艰苦努力和专研,而不在于和团队其他人去抢思想、抢观点、抢材料。其实,做学问也没有想象的那么难,一旦养成习惯,乐趣就在其中了,想让你不做学问可能都难。 参考: 关于论文、成果的署名顺序问 题
个人分类: 11|5117 次阅读|7 个评论
学科分割使人看不到完整图景
热度 10 Wuyishan 2013-3-25 06:48
学科分割使人看不到完整图景 武夷山 美国密苏里大学的 JohnM.Budd 在 JournalofInformation Science 杂志 2011 年第 4 期发表文章, Revisitingtheimportance ofcognitionininformationscience (认知在情报学中的重要性之再思考),原文见 http://jis.sagepub.com/content/37/4/360.full.pdf+html 。他在文章中引用了认知科学家 A.Wilson 在 BoundariesoftheMind (剑桥大学出版社, 2004 )一书中的观点:不同学科都会(主动)限制自己的探索范围,或许已经导致研究者看不到完整图景的地步。 例如,在进化生物学内,人类行动者( Agents )被视为具有特定种系发生历史和生态利基范围的动物。在人类学中,人类行动者是意义阐释者和文化创造者。在认知科学内,人类行动者是计算程序和模块的用武之地。在经济学内,人是理性决策者和效用优化者。 博主: Wilson 的意思是,那么多学科都在研究人,但只要不打破学科界限,则说不清人到底是什么,无法提供关于人的完整图景。同样,很多学科都在关注信息,但是,由于现在的学科分割,信息被人们理解的完整程度同盲人摸象的情况差不多。
个人分类: 图书情报学研究|4768 次阅读|14 个评论
[转载]图像分割(Image Segmentation)
gexingmeicun 2012-8-5 00:51
图像分割(Image Segmentation) 作者:王先荣 前言 图像分割指的是将数字图像细分为多个图像子区域的过程,在OpenCv中实现了三种跟图像分割相关的算法,它们分别是:分水岭分割算法、金字塔分割算法以及均值漂移分割算法。它们的使用过程都很简单,下面的文章权且用于记录,并使该系列保持完整吧。 分水岭分割算法 分水岭分割算法需要您或者先前算法提供标记,该标记用于指定哪些大致区域是目标,哪些大致区域是背景等等;分水岭分割算法的分割效果严重依赖于提供的标记。OpenCv中的函数cvWatershed实现了该算法,函数定义如下: !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- void cvWatershed( const CvArr * image, CvArr * markers) 其中:image为8为三通道的彩色图像; markers是单通道整型图像,它用不同的正整数来标记不同的区域,下面的代码演示了如果响应鼠标事件,并生成标记图像。 生成标记图像 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- // 当鼠标按下并在源图像上移动时,在源图像上绘制分割线条 private void pbSource_MouseMove( object sender, MouseEventArgs e) { // 如果按下了左键 if (e.Button == MouseButtons.Left) { if (previousMouseLocation.X = 0 previousMouseLocation.Y = 0 ) { Point p1 = new Point(( int )(previousMouseLocation.X * xScale), ( int )(previousMouseLocation.Y * yScale)); Point p2 = new Point(( int )(e.Location.X * xScale), ( int )(e.Location.Y * yScale)); LineSegment2D ls = new LineSegment2D(p1, p2); int thickness = ( int )(LineWidth * xScale); imageSourceClone.Draw(ls, new Bgr(255d, 255d, 255d), thickness); pbSource.Image = imageSourceClone.Bitmap; imageMarkers.Draw(ls, new Gray(drawCount), thickness); } previousMouseLocation = e.Location; } } // 当松开鼠标左键时,将绘图的前一位置设置为(-1,-1) private void pbSource_MouseUp( object sender, MouseEventArgs e) { previousMouseLocation = new Point( - 1 , - 1 ); drawCount ++ ; } 您可以用类似下面的方式来使用分水岭算法: 使用分水岭分割算法 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- /// summary /// 分水岭算法图像分割 /// /summary /// returns 返回用时 /returns private string Watershed() { // 分水岭算法分割 Image Gray, Int32 imageMarkers2 = imageMarkers.Copy(); Stopwatch sw = new Stopwatch(); sw.Start(); CvInvoke.cvWatershed(imageSource.Ptr, imageMarkers2.Ptr); sw.Stop(); // 将分割的结果转换到256级灰度图像 pbResult.Image = imageMarkers2.Bitmap; imageMarkers2.Dispose(); return string .Format( " 分水岭图像分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } 金字塔分割算法 金字塔分割算法由cvPrySegmentation所实现,该函数的使用很简单;需要注意的是图像的尺寸以及金字塔的层数,图像的宽度和高度必须能被2整除,能够被2整除的次数决定了金字塔的最大层数。下面的代码演示了如果校验金字塔层数: 校验金字塔分割的金字塔层数 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- /// summary /// 当改变金字塔分割的参数“金字塔层数”时,对参数进行校验 /// /summary /// param name="sender"/param /// param name="e"/param private void txtPSLevel_TextChanged( object sender, EventArgs e) { int level = int .Parse(txtPSLevel.Text); if (level 1 || imageSource.Width % ( int )(Math.Pow( 2 , level - 1 )) != 0 || imageSource.Height % ( int )(Math.Pow( 2 , level - 1 )) != 0 ) MessageBox.Show( this , " 注意:您输入的金字塔层数不符合要求,计算结果可能会无效。 " , " 金字塔层数错误 " ); } 使用金字塔分割的示例代码如下: 使用金字塔分割算法 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- /// summary /// 金字塔分割算法 /// /summary /// returns/returns private string PrySegmentation() { // 准备参数 Image Bgr, Byte imageDest = new Image Bgr, byte (imageSource.Size); MemStorage storage = new MemStorage(); IntPtr ptrComp = IntPtr.Zero; int level = int .Parse(txtPSLevel.Text); double threshold1 = double .Parse(txtPSThreshold1.Text); double threshold2 = double .Parse(txtPSThreshold2.Text); // 金字塔分割 Stopwatch sw = new Stopwatch(); sw.Start(); CvInvoke.cvPyrSegmentation(imageSource.Ptr, imageDest.Ptr, storage.Ptr, out ptrComp, level, threshold1, threshold2); sw.Stop(); // 显示结果 pbResult.Image = imageDest.Bitmap; // 释放资源 imageDest.Dispose(); storage.Dispose(); return string .Format( " 金字塔分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } 均值漂移分割算法 均值漂移分割算法由cvPryMeanShiftFiltering所实现,均值漂移分割的金字塔层数只能介于 之间,您可以用类似下面的代码来使用它: 使用均值漂移分割算法 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- /// summary /// 均值漂移分割算法 /// /summary /// returns/returns private string PryMeanShiftFiltering() { // 准备参数 Image Bgr, Byte imageDest = new Image Bgr, byte (imageSource.Size); double spatialRadius = double .Parse(txtPMSFSpatialRadius.Text); double colorRadius = double .Parse(txtPMSFColorRadius.Text); int maxLevel = int .Parse(txtPMSFNaxLevel.Text); int maxIter = int .Parse(txtPMSFMaxIter.Text); double epsilon = double .Parse(txtPMSFEpsilon.Text); MCvTermCriteria termcrit = new MCvTermCriteria(maxIter, epsilon); // 均值漂移分割 Stopwatch sw = new Stopwatch(); sw.Start(); OpenCvInvoke.cvPyrMeanShiftFiltering(imageSource.Ptr, imageDest.Ptr, spatialRadius, colorRadius, maxLevel, termcrit); sw.Stop(); // 显示结果 pbResult.Image = imageDest.Bitmap; // 释放资源 imageDest.Dispose(); return string .Format( " 均值漂移分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } 函数cvPryMeanShiftFiltering在EmguCv中没有实现,我们可以用下面的方式来使用: 调用均值漂移分割 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- // 均值漂移分割 public static extern void cvPyrMeanShiftFiltering(IntPtr src, IntPtr dst, double spatialRadius, double colorRadius, int max_level, MCvTermCriteria termcrit); 分割效果及性能对比 上述三种分割算法的效果如何呢?下面我们以它们的默认参数,对一幅2272x1704大小的图像进行分割。得到的结果如下所示: 图1 分水岭分割算法(左图白色的线条用于标记区域) 图2 金字塔分割算法 图3 均值漂移分割算法 从上面我们可以看出: (1)分水岭分割算法的分割效果效果最好,均值漂移分割算法次之,而金字塔分割算法的效果最差; (2)均值漂移分割算法效率最高,分水岭分割算法接近于均值漂移算法,金字塔分割算法需要很长的时间。 值得注意的是分水岭算法对标记很敏感,需要仔细而认真的绘制。 本文的完整代码如下: 本文完整代码 !-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.UI; namespace ImageProcessLearn { public partial class FormImageSegment : Form { // 成员变量 private string sourceImageFileName = " wky_tms_2272x1704.jpg " ; // 源图像文件名 private Image Bgr, Byte imageSource = null ; // 源图像 private Image Bgr, Byte imageSourceClone = null ; // 源图像的克隆 private Image Gray, Int32 imageMarkers = null ; // 标记图像 private double xScale = 1d; // 原始图像与PictureBox在x轴方向上的缩放 private double yScale = 1d; // 原始图像与PictureBox在y轴方向上的缩放 private Point previousMouseLocation = new Point( - 1 , - 1 ); // 上次绘制线条时,鼠标所处的位置 private const int LineWidth = 5 ; // 绘制线条的宽度 private int drawCount = 1 ; // 用户绘制的线条数目,用于指定线条的颜色 public FormImageSegment() { InitializeComponent(); } // 窗体加载时 private void FormImageSegment_Load( object sender, EventArgs e) { // 设置提示 toolTip.SetToolTip(rbWatershed, " 可以在源图像上用鼠标绘制大致分割区域线条,该线条用于分水岭算法 " ); toolTip.SetToolTip(txtPSLevel, " 金字塔层数跟图像尺寸有关,该值只能是图像尺寸被2整除的次数,否则将得出错误结果 " ); toolTip.SetToolTip(txtPSThreshold1, " 建立连接的错误阀值 " ); toolTip.SetToolTip(txtPSThreshold2, " 分割簇的错误阀值 " ); toolTip.SetToolTip(txtPMSFSpatialRadius, " 空间窗的半径 " ); toolTip.SetToolTip(txtPMSFColorRadius, " 色彩窗的半径 " ); toolTip.SetToolTip(btnClearMarkers, " 清除绘制在源图像上,用于分水岭算法的大致分割区域线条 " ); // 加载图像 LoadImage(); } // 当窗体关闭时,释放资源 private void FormImageSegment_FormClosing( object sender, FormClosingEventArgs e) { if (imageSource != null ) imageSource.Dispose(); if (imageSourceClone != null ) imageSourceClone.Dispose(); if (imageMarkers != null ) imageMarkers.Dispose(); } // 加载源图像 private void btnLoadImage_Click( object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.CheckFileExists = true ; ofd.DefaultExt = " jpg " ; ofd.Filter = " 图片文件|*.jpg;*.png;*.bmp|所有文件|*.* " ; if (ofd.ShowDialog( this ) == DialogResult.OK) { if (ofd.FileName != "" ) { sourceImageFileName = ofd.FileName; LoadImage(); } } ofd.Dispose(); } // 清除分割线条 private void btnClearMarkers_Click( object sender, EventArgs e) { if (imageSourceClone != null ) imageSourceClone.Dispose(); imageSourceClone = imageSource.Copy(); pbSource.Image = imageSourceClone.Bitmap; imageMarkers.SetZero(); drawCount = 1 ; } // 当鼠标按下并在源图像上移动时,在源图像上绘制分割线条 private void pbSource_MouseMove( object sender, MouseEventArgs e) { // 如果按下了左键 if (e.Button == MouseButtons.Left) { if (previousMouseLocation.X = 0 previousMouseLocation.Y = 0 ) { Point p1 = new Point(( int )(previousMouseLocation.X * xScale), ( int )(previousMouseLocation.Y * yScale)); Point p2 = new Point(( int )(e.Location.X * xScale), ( int )(e.Location.Y * yScale)); LineSegment2D ls = new LineSegment2D(p1, p2); int thickness = ( int )(LineWidth * xScale); imageSourceClone.Draw(ls, new Bgr(255d, 255d, 255d), thickness); pbSource.Image = imageSourceClone.Bitmap; imageMarkers.Draw(ls, new Gray(drawCount), thickness); } previousMouseLocation = e.Location; } } // 当松开鼠标左键时,将绘图的前一位置设置为(-1,-1) private void pbSource_MouseUp( object sender, MouseEventArgs e) { previousMouseLocation = new Point( - 1 , - 1 ); drawCount ++ ; } // 加载源图像 private void LoadImage() { if (imageSource != null ) imageSource.Dispose(); imageSource = new Image Bgr, byte (sourceImageFileName); if (imageSourceClone != null ) imageSourceClone.Dispose(); imageSourceClone = imageSource.Copy(); pbSource.Image = imageSourceClone.Bitmap; if (imageMarkers != null ) imageMarkers.Dispose(); imageMarkers = new Image Gray, Int32 (imageSource.Size); imageMarkers.SetZero(); xScale = 1d * imageSource.Width / pbSource.Width; yScale = 1d * imageSource.Height / pbSource.Height; drawCount = 1 ; } // 分割图像 private void btnImageSegment_Click( object sender, EventArgs e) { if (rbWatershed.Checked) txtResult.Text += Watershed(); else if (rbPrySegmentation.Checked) txtResult.Text += PrySegmentation(); else if (rbPryMeanShiftFiltering.Checked) txtResult.Text += PryMeanShiftFiltering(); } /// summary /// 分水岭算法图像分割 /// /summary /// returns 返回用时 /returns private string Watershed() { // 分水岭算法分割 Image Gray, Int32 imageMarkers2 = imageMarkers.Copy(); Stopwatch sw = new Stopwatch(); sw.Start(); CvInvoke.cvWatershed(imageSource.Ptr, imageMarkers2.Ptr); sw.Stop(); // 将分割的结果转换到256级灰度图像 pbResult.Image = imageMarkers2.Bitmap; imageMarkers2.Dispose(); return string .Format( " 分水岭图像分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } /// summary /// 金字塔分割算法 /// /summary /// returns/returns private string PrySegmentation() { // 准备参数 Image Bgr, Byte imageDest = new Image Bgr, byte (imageSource.Size); MemStorage storage = new MemStorage(); IntPtr ptrComp = IntPtr.Zero; int level = int .Parse(txtPSLevel.Text); double threshold1 = double .Parse(txtPSThreshold1.Text); double threshold2 = double .Parse(txtPSThreshold2.Text); // 金字塔分割 Stopwatch sw = new Stopwatch(); sw.Start(); CvInvoke.cvPyrSegmentation(imageSource.Ptr, imageDest.Ptr, storage.Ptr, out ptrComp, level, threshold1, threshold2); sw.Stop(); // 显示结果 pbResult.Image = imageDest.Bitmap; // 释放资源 imageDest.Dispose(); storage.Dispose(); return string .Format( " 金字塔分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } /// summary /// 均值漂移分割算法 /// /summary /// returns/returns private string PryMeanShiftFiltering() { // 准备参数 Image Bgr, Byte imageDest = new Image Bgr, byte (imageSource.Size); double spatialRadius = double .Parse(txtPMSFSpatialRadius.Text); double colorRadius = double .Parse(txtPMSFColorRadius.Text); int maxLevel = int .Parse(txtPMSFNaxLevel.Text); int maxIter = int .Parse(txtPMSFMaxIter.Text); double epsilon = double .Parse(txtPMSFEpsilon.Text); MCvTermCriteria termcrit = new MCvTermCriteria(maxIter, epsilon); // 均值漂移分割 Stopwatch sw = new Stopwatch(); sw.Start(); OpenCvInvoke.cvPyrMeanShiftFiltering(imageSource.Ptr, imageDest.Ptr, spatialRadius, colorRadius, maxLevel, termcrit); sw.Stop(); // 显示结果 pbResult.Image = imageDest.Bitmap; // 释放资源 imageDest.Dispose(); return string .Format( " 均值漂移分割,用时:{0:F05}毫秒。\r\n " , sw.Elapsed.TotalMilliseconds); } /// summary /// 当改变金字塔分割的参数“金字塔层数”时,对参数进行校验 /// /summary /// param name="sender"/param /// param name="e"/param private void txtPSLevel_TextChanged( object sender, EventArgs e) { int level = int .Parse(txtPSLevel.Text); if (level 1 || imageSource.Width % ( int )(Math.Pow( 2 , level - 1 )) != 0 || imageSource.Height % ( int )(Math.Pow( 2 , level - 1 )) != 0 ) MessageBox.Show( this , " 注意:您输入的金字塔层数不符合要求,计算结果可能会无效。 " , " 金字塔层数错误 " ); } /// summary /// 当改变均值漂移分割的参数“金字塔层数”时,对参数进行校验 /// /summary /// param name="sender"/param /// param name="e"/param private void txtPMSFNaxLevel_TextChanged( object sender, EventArgs e) { int maxLevel = int .Parse(txtPMSFNaxLevel.Text); if (maxLevel 0 || maxLevel 8 ) MessageBox.Show( this , " 注意:均值漂移分割的金字塔层数只能在0至8之间。 " , " 金字塔层数错误 " ); } } }
个人分类: 科研笔记|6325 次阅读|0 个评论
图像标注-分割与分类
Thinklikesci 2012-7-5 17:10
给定一组标签集合,图像标注的任务是对图像的所有的像素赋予一个类别标签(通常是目标类别)。这里涉及到分割与分类两个问题。与一般分割问题不同的是标注还需对分割块赋予类别,与一般分类问题不同的是分类前需要先进行分割,因为目标边界未可知,无法提取目标类别的特征。 图像标注的一般方法是先进行无监督分割,并对分割块进行分类,最后再用图模型对像素标签进行优化,得到最终的分割与分类。描述像素之间关系的图模型因此是解决该问题的重要步骤,但是图模型的建立,训练,测试都比较复杂。工作量大。因此对于初学者,或者时间紧迫基础又不够者暂不建议研究使用。另一个问题是初始分割的准确性对最终结果影响也很大。 一个可考虑的方向是图像分类。如pascal中图像分类,即预测某目标的存在与否,该问题也许简单的多。需要研究的是特征(可进行预检测/分割,多分类)等问题。
个人分类: 科研笔记|4852 次阅读|0 个评论
[转载]分水岭图像分割算法
热度 1 CanXiang 2012-6-4 16:59
[转载]分水岭图像分割算法
基于形态学分水岭的分割   到现在为止,已经讨论了基于 3 种主要概念的分割方法: (a) 间断的检测; (b) 门限处理和 (c) 区域处理。每种方法各有优点 ( 例如,全局门限处理的速度优势 ) 和缺点 ( 如,以灰度级的间断检测为基础的方法需要诸如边线连接等后处理 ) 。本节中,讨论基于所谓的形态学分水岭概念的方法。接下来将要说明,形态学分水岭分割将其他 3 种方法中的许多概念进行了具体化,包括连续的边界分割在内,它生成的分割结果通常更为稳定。这条途径也为在分割过程中结合基于知识的约束提供了一个简单的框架。 一.基本概念 分水岭概念是以对图像进行三维可视化处理为基础的:其中两个是坐标,另一个是灰度级。对于这样:一种“地形学”的解释,我们考虑三类点: (a) 属于局部性最小值的点; (b) 当一滴水放在某点的位置上的时候,水一定会下落到一个单一的最小值点; (c) 当水处在某个点的位置上时,,水会等概率地流向不止一个这样的最小值点。对一个特定的区域最小值,满足条件 (b) 的点的集合称为这个最小值的“汇水盆地”或“分水岭”。满足条件 (c) 的点的集合组成地形表面的峰线,术语称做“分割线”或“分水线”。 基于这些概念的分割算法的主要目标是找出分水线。基本思想很简单:假设在每个区域最小值的位置上打一个洞并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。当处在不同的汇聚盆地中的水将要聚合在一起时,修建的大坝将阻止聚合。水将只能到达大坝的顶部处于水线之上的程度。这些大坝的边界对应于分水岭的分割线。所以,它们是由分水岭算法提取出来的 ( 连续的 ) 边界线。 这些思想可以用图 10.44 作为辅助做进一步的解释。图 10.44(a) 显示了一个简单的灰度级图像。图 10.44(b) 是地形图。其中“山峰”的高度与输入图像的灰度级值成比例。为了易于解释,这个结构的后方被遮蔽起来。这是为了不与灰度级值相混淆;三维表达对一般地形学是很重要的。为了阻止上升的水从这些结构的边缘溢出,我们想像将整幅地形图的周围用比最高山峰还高的大坝包围起来。最高山峰的值是由输入图像灰度级可能具有的最大值决定的。 假设在每个区域最小值中打一个洞 ,并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。图 10.44(c) 说明被水淹没的第一个阶段,这里水用浅灰色表示,覆盖了对应于图中深色背景的区域。在图 10.44(d) 和 (e) 中,我们看到水分别在第一和第二汇水盆地中上升。由于水持续上升,最终水将从一个汇水盆地中溢出到另一个之中。图 10.44(f) 中显示了溢出的第一个征兆。这里,水确实从左边的盆地溢出到右边的盆地,并且两者之间有一个短“坝” ( 由单像素构成 ) 阻止这一水位的水聚合在一起 ( 在接下来的章节中将讨论坝的构筑 ) 。由于水位不断上升,实际的效果要超出我们所说的。如图 10.44(g) 所显示的那样。这幅图中在两个汇水盆地之间显示了一条更长的坝,另一条水坝在右上角。这条水坝阻止了盆地中的水和对应于背景的水的聚合。这个过程不断延续直到到达水位的最大值 ( 对应于图像中灰度级的最大值 ) 。水坝最后剩下的部分对应于分水线,这条线就是要得到的分割结果。 对于这个例子,在图 l0.44(h) 中显示为叠加到原图上的一个像素宽的深色路径。注意一条重要的性质就是分水线组成一条连通的路径,由此给出了区域之间的连续的边界。 分水岭分割法的主要应用是从背景中提取近乎一致 ( 类似水滴的 ) 的对象。那些在灰度级上变化较小的区域的梯度值也较小。因此,实际上,我们经常可以见到分水岭分割方法与图像的梯度有更大的关系,而不是图像本身。有了这样的表示方法,汇水盆地的局部最小值就可以与对应于所关注的对象的小的梯度值联系起来了。 二.水坝构造 在进行讨论之前,让我们考虑一下如何构造分水岭分割方法所需的水坝或分水线。水坝的构造是以二值图像为基础的,这种图像属于二维整数空间 Z 2 ( 见 2.4.2 节 ) 。构造水坝分离二元点集的最简单的方法是使用形态膨胀 ( 见 9.2.1 节 ) 。 图 l0.45 说明了如何使用形态膨胀构造水坝的基本点。图 l0.45(a) 显示了两个汇水盆地的部分区域在淹没步骤的第 n-1 步时的图像。图 10.45(b) 显示了淹没的下一步 ( 第 n 步 ) 的结果。水已经从一个盆地溢出到另一个盆地,所以,必须建造水坝阻止这种情况的发生。为了与紧接着要介绍的符号相一致,令 M 1 和 M 2 表示在两个区域极小值中包含的点的坐标集合。然后,将处于汇水盆地中的点的坐标集合与这两个在溢出的第 n-1 个阶段的最小值联系起来,并用 C n-1 (M 1 ) 和 C n-1 (M 2 ) 表示。这就是图 10.45(a) 中的两个黑色区域。 令这两个集合的联合用 C 表示。图 l0.45(a) 中有两个连通分量 ( 见 2.5.2 节关于连通分量的部分 ) ,而图 10.45(b) 中只有一个连通分量。这个连通分量包含着前面的两个分量,用虚线表示。两个连通分量变成一个连通分量的事实说明两个汇水盆地中的水在淹没的第 n 步聚合了。用 q 表示此时的连通分量。注意,第 n-1 步中的两个连通分量可以通过使用“与”操作 (q ∩ C ) 从 q 中提取出来。我们也注意到,属于独立的汇水盆地的所有点构成了一个单一的连通分量。 假设图 10.45(a) 中的每个连通分量通过使用图 l0.45(e) 中显示的结构元膨胀,在两个条件下: (1) 膨胀受到 q 的约束 ( 这意味着在膨胀的过程中结构化元素的中心只能定位于 q 中 ) 并且 (2) 在引起集合聚合的那些点上不能执行膨胀 ( 成为单一的连通分量 ) 。图 l0.45(d) 显示首轮膨胀 ( 浅灰色表示 ) 使用了每个初始连通分量的边界。注意,在膨胀过程中每个点都满足条件 (1) 。条件 (2) 在膨胀处理中没有应用于任何的点;因此,每个区域的边界都进行了均匀的扩展。 在第二轮膨胀中 ( 中等灰度表示 ) ,几个不满足条件 (1) 的点符合条件 (2) 时,得到图中显示的断开周界。很明显,只有满足上述两个条件的属于 q 中的点描绘了图 10.45(d) 中交叉阴影线表示的一个像素宽度的连通路径。这条路径组成在淹没的第 n 个阶段我们希望得到的水坝。在这个淹没水平上,水坝的构造是由置所有刚好在这条路径上的点的值为比图像中灰度级的最大值还大的值完成的。所有水坝的高度通常设定为 1 加上图像中灰度级最大允许值。这样设定可以阻止在水位不断升高的情况下水越过部分水坝。应该特别注意到的是通过这一过程建立的水坝是连通分量,就是我们希望得到的分割边界。就是说,这种方法消除了分割线产生间断的问题。 尽管刚刚讨论的过程是用一个简单的例子说明的,但是处理更为复杂情况的方法是完全相同的,包括图 10.45(c) 中显示的 3 × 3 对称结构元素的使用也是相同的。 三.分水岭分割算法 令 M 1 , M 2 ,…, M R 为表示图像 g(x , y) 的局部最小值点的坐标的集合。如同在 10.5.1 节结尾说明的那样,这是一幅典型的梯度图像。令 G(M i ) 为一个点的坐标的集合,这些点位于与局部最小值 M i ( 回想无论哪一个汇水盆地内的点都组成一个连通分量 ) 相联系的汇水盆地内。符号 min 和 max 代表 g(x , y) 的最小值和最大值。最后,令 T 表示坐标 (s , t) 的集合,其中 g(s,t)n, 即 在几何上, T 是 g(x , y) 中的点的坐标集合,集合中的点均位于平面 g(x , y)=n 的下方。 随着水位以整数量从 n=min+1 到 n=max+1 不断增加,图像中的地形会被水漫过。在 水位漫过地形的过程中的每一阶段,算法都需要知道处在水位之下的点的数目。从概念上来说,假设 T 中的坐标处在 g(x , y)=n 平面之下,并被“标记”为黑色,所有其他的坐标被标记为白色。然后,当我们在水位以任意增量 n 增加的时候,从上向下观察 xy 平面,会看到一幅二值图像。在图像中黑色点对应于函数中低于平面 g(x , y)=n 的点。这种解释对于理解下面的讨论很有帮助。 令 C n (M i ) 表示汇水盆地中点的坐标的集合。这个盆地与在第 n 阶段被淹没的最小值有关。参考前一段的讨论, C n (M i ) 也可以被看做由下式给出的二值图像: 换句话说,如果 (x , y) ∈ C n (M i ) 且 (x , y) ∈ T ,则在位置 (x , y) 有 C n (M i )=1 。否 则C n (M i )=0. 对于这个结果几何上的解释是很简单的。我们只需在水溢出的第 n 个阶段使用“与 (AND) ”算子将 T 中的二直图像分离出来即可。 T 是与局部最小值 M i 相联系的集合。 接下来,我们令 C 表示在第 n 个阶段汇水盆地被水淹没的部分的合集: 然后令 C 为所有汇水盆地的合集: 可以看出 处于 C n ( M i ) 和 T 中的元素在算法执行期间是不会被替换的,而且这两个集合中的元素的数目与 n 保持同步增长。因此, C 是集合 C 的子集。根据式 (10.5.2) 和式 (10.5.3) , C 是 T 的子集,所以, C 是 T 的子集。从这个结论我们得 出重要的结果: C 中的每个连通分量都恰好是 T 的一个连通分量。 找寻分水线的算法开始时设定 C =T 。然后算法进入递归调用,假设在第 n 步时,已经构造了 C 。根据 C 求得 C 的过程如下:令 Q 代表 T 中连通分量的集合。然后,对于每个连通分量 q ∈ Q ,有下列 3 种可能性: (a) q ∩ C 为空。 (b) q ∩ C 包含 C 中的一个连通分量。 (c) q ∩ C 包含 C 多于一个的连通分量。 根据 C 构造 C 取决于这 3 个条件。当遇到一个新的最小值时符合条件 (a) ,则将 q 并人 C 构成 C 。当 q 位于某些局部最小值构成的汇水盆地中时,符合条件 (b) ,此时将 q 合并入 C 构成 C 。当遇到全部或部分分离两个或更多汇水盆地的山脊线的时候,符合条件 (c) 。进一步的注水会导致不同盆地的水聚合在一起,从而使水位趋于一致。因此,必须在 q 内建立一座水坝 ( 如果涉及多个盆地就要建立多座水坝 ) 以阻止盆地内的水溢出。正如前一节中的解释,当用 3 × 3 个 1 的结构元素膨胀 q ∩ C 并且需要将这种膨胀限制在 q 内时,一条一个像素宽度的水坝是能够构造出来的。 通过使用与 g(x , y) 中存在的灰度级值相对应的 n 值,可以改善算法效率;根据 g(x , y) 的直方图,可以确定这些值及其最小值和最大值。   例 10.18 分水岭分割算法的说明 分别考虑图 10.46(a) 和 (b) 中显示的图像和它的梯度。应用刚才讨论的分水岭算法得到图 10.46(c) 中显示的梯度图像的分水线 ( 白色路径 ) 。这些分割的边界叠加在原图上示于图 10.46(d) 。如在本节中开始时所注意到的,分割边界具有那些被连接起来的路径的重要性质 。 四.应用标记 直接以前一节中讨论的形式使用分水岭分割算法通常会由于噪声和其他诸如梯度的局部不规则性的影响造成过度分割。如图 10 . 47 所示,过度分割足以令应用算法得到的结果变得毫无用处。此时,过度分割意味着分割区域过多。一个较实际的解决方案是通过合并预处理步骤来限制允许存在的区域的数目,这些预处理步骤是为将附加知识应用于分割过程而设置的。 用于控制过度分割的方法是以标记的概念为基础的。一个标记是属于一幅图像的连通分量。我们有与重要对象相联系的内部标记,还有同背景相联系的外部标记。选择标记的典型过程包括两个主要步骤: (1) 预处理; (2) 定义一个所有标记必须满足的准则集合。为了对此进行说明,再次考虑图 10.47(a) 。导致图 10.47(b) 中过度分割结果的一部分原因是大量隐含的最小值。由于这些区域的尺寸很小,所以这些最小值中有很多是不相关的细节。在前面的讨论中,已经不止一次地提到,将很小的细节对于图像的影响降至最低的有效 方法是用一个平滑滤渡器对图像进行过滤。在这种特殊情况下,这是一种合适的预处理方案。 假设在此时将内部标记定义为 (1) 被更高“海拔”点包围起来的区域; (2) 区域中的点组成一个连通分量;并且 (3) 所有属于这个连通分量的点具有相同的灰度级值。在图像经过平滑处理之后,满足这些定义的内部标记以图 10.48(a) 中浅灰色、斑点状区域表示。下一步,对平滑处理后的图像使用分水岭算法,并限制这些内部标记只能是允许的局部最小值。图 l0.48(a) 显示了得到的分水线。将这些分水线定义为外部标记。注意,沿着分水线的点是很好的背景候选点。因为它们经过相邻的标记之间的最高点。 图 10.48(a) 中显示的外部标记有效地将图像分割成不同区域。每个区域包含一个惟一的内部标记和部分背景。问题是因此变为将每个这样的区域一分为二:单一的对象和它的背景。我们对这个简单的问题能够应用多种在本章前面讨论过的分割技术。另一种简单的方法是对每个单独的区域使用分水岭分割算法。就是说,我们只求得平滑后的图像的梯度 ,然后约束算法只对包含特定区域中标记的分水岭进行操作。使用这种方法得到的结果显示于图 10.48(b) 中。相对于图 10.47(b) 的改善之处是显而易见的。 标记的选择可以用基于灰度级值和连通性的简单的过程分类,如刚才所说明的那样,更复杂的描述涉及尺寸、形状、位置、相对距离、纹理内容等等 ( 见第 11 章关于描绘子的部分 ) 。关键是标记的使用给我们带来关于分割问题的某种带有先验性质的知识。应该提醒读者注意的是:人类经常以先验知识用日常的视觉辅助,进行各种分割和更高级的工作,最熟悉的例子就是在阅读上下文时所用到的方法。因此,分水岭分割方法提出了一种能有效使用这类知识的机制。这是这种方法的一个突出优点。 转自: http://met.fzu.edu.cn/dip/c10_5.htm
13300 次阅读|2 个评论
一般性物体的分割方法(二)
CanXiang 2012-6-4 14:05
在(一)中我简单介绍了图像分割的一些基本概念。本次内容主要来分析一下分割问题中存在的一些挑战;我想通过这个文章,让朋友们知道怎么去分析分割中的问题;怎么样去选择一个适合自己的课题。 首先举一个简单的例子。现在有两张图像,各自包含一匹马;非常巧的是,这两匹马都是一个姿态下的,但是颜色不同;也就是说马有相同的pose,大小也相同。当给你展示第一张的时候,你也许会想到这样一个把马分割出来的假设:直接按照颜色分,因为马的颜色与周围背景的颜色不同;现在我们把这个想到的假设记为H,它的含义就是提取图像中某种颜色(R,G,B)(设置为一个定值),出来的就是我们要找的马;这时,第二张图像来了,你把这个H用到第二张上去,就不怎么work了。因为马颜色变化了。用了这么冗余的话来说这个,想表明:一些图像分割的问题,往往要将一个特定类(比如,马,船,花,衣服等)中的物体给分割出来,那么仅仅依靠于你先验获得的颜色信息往往是不够的。对于这个马,我们抓住了颜色这个信息,其实这还是建立在一个隐藏的假设上,就是背景足够简单,尺度一样,姿态一致。要是背景很复杂,我们直接根据颜色截断的结果就是很差:要么多了背景(false positive),要么少了马(false negative)。因此,背景的复杂度往往使得颜色模型性能降低。 必须要说的是,马的姿态也很有可能变化万千。最直观的想法,就是利用颜色以外的信息来分割。因为是特定类分割,我们有机会去获得一个类的形状。对于每个图像都获得一个形状就能帮助我们很好的来约束的问题;能使得我们更加合理的获得最后结果。可以看的出来,我们的问题现在才可能成为一个真正特定类的问题(因为有了这个类的形状信息)。 有了形状,你就要将对应的形状对应到一个包含特定尺度物体的图像中去,如果形状对于你的图像来说过大或者过小,都是没有意义的。所以后面要涉及的就是对齐的问题。一般处理这个对齐可以用物体检测的方法,就是在你做分割之前,先对物体进行一个检测,获得大致的区域,在用颜色,形状特征来建模。但是,这样的检测结果很会影响你分割结果。因为检测检测不是物体级别检测,很多都是只检测物体的一个部分,或者提供一个不是很紧致的矩形框。这样在对齐中有了扰动,就很用后端来弥补。 也有别的方法来处理这个问题。就是建立动态模板。这里不展开讲。它就是把这个对齐的问题放到了后端来处理,而不依赖于前端的检测。 所以说,这个特定类物体的分割,往往要考虑:颜色、形状、对齐等。要做出一个全自动分割的方法往往存在很大的挑战。 在下一篇中我会讲讲交互方法在分割中的应用。
6158 次阅读|0 个评论
[转载]C#字符串进行分割
zhenghui2915 2012-5-17 08:55
C#字符串进行分割 本文介绍如何使用split来把C#字符串分割,我这里对split做一些简单的总结,希望能够对大家有所帮助。 最近经常看到论坛中许多帖子询问如何使用split来把C#字符串分割,我这里对split做一些简单的总结,希望能够对大家有所帮助。下面介绍几种方法: 第一种方法:打开vs.net新建一个控制台项目。然后在Main()方法下输入下面的程序。 string s = "abcdeabcdeabcde" ; string s sArray1 =s.Split(newchar {'c','d','e'}); foreach(stringiinsArray1) Console.WriteLine(i.ToString()); 除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 usingSystem.Text.RegularExpressions; System.Text.RegularExpressions string content = "agcsmallmacsmallgggsmallytx" ; string[] resultString = Regex .Split(content,"small",RegexOptions.IgnoreCase) foreach(stringiinresultString) Console.WriteLine(i.ToString());
个人分类: 程序设计|2 次阅读|0 个评论
[转载]冰川河同位素径流分割法确定水资源对气候变化响应的敏感性
htam 2012-4-17 15:55
冰川河是发源于高寒山区的河流,其源头有冰川存在。冰川河的源头通常称之为“水塔”,仅青藏高原和天山这两座“亚洲水塔”就供养全球至少1/4的人口。冰川河因含有冰川融水,而极易受到气候变暖的影响。尤其在干旱区,冰川河出山径流量基本上代表水资源总量。气候变暖带来的变化直接影响中下游的人口与农业安全。因而,研究冰川河对气候变化的敏感程度对于选择适当的适应对策极为关键,然而,已有的研究方法多只能定性评估,或者需要复杂的野外观测。 地质与地球物理研究所工程地质与水资源研究室博士生孔彦龙与导师庞忠和研究员以“中亚水塔”天山为研究区,采用冰川河同位素径流分割法对这一问题进行了探索。首先,他们对比了过去50年以来南北疆水资源变化,发现:虽然北疆气候变化明显强于南疆(图2a和2b),但是位于北疆的乌鲁木齐河出山径流量增加(10.0%,图2c)却远远比不上南疆的库马拉克河出山径流量的增加(38.7%,图2d)。继而,他们分别对北疆的乌鲁木齐河流域和南疆的库马拉克河进行了同位素径流分割(图1),结果表明,乌鲁木齐河出山径流中,冰川融水比例低于9%(图2e);而库马拉克河冰川融水比例高于57%(图2f)。据此,他们得出结论,冰川河对气候变化的敏感性取决于冰川融水所占份额,冰川补给比例高的河流其水资源对气候变化更加敏感。 图1:研究区分布 图2:新疆地区气候变化(a和b)、乌鲁木齐河(c)和库马拉克河径流量变化(d)和乌鲁木齐河(e)和库马拉克河(f)径流分割结果 冰川河径流分割可以采用的不同方法,同位素方法由于能够直接厘清水分来源,因而其精度与可靠性高于普通水文学方法,而对于没有观测资料的河流(ungauged river)来说,其快速高效的优势则更为显著。论文评审过程中,审稿人认为冰川河同位素径流分割法在气候变化对水资源的影响研究方面,代表了一个新的研究方向。 该研究成果近期发表在国际水文学权威期刊 Journal of Hydrology 上(Kong et al. Evaluating the Sensitivity of Glacier Rivers to Climate Change based on Hydrograph Separation of Discharge. Journal of Hydrology . 2012, (434–435): 121–129, doi: 10.1016/j.jhydrol.2012.02.029)
个人分类: 科研笔记|3579 次阅读|0 个评论
[转载]JH: 冰川河同位素径流分割法确定水资源对气候变化响应的敏感性
热度 1 michaelkong 2012-4-13 19:42
冰川河是发源于高寒山区的河流,其源头有冰川存在。冰川河的源头通常称之为“水塔”,仅青藏高原和天山这两座“亚洲水塔”就供养全球至少1/4的人口。冰川河因含有冰川融水,而极易受到气候变暖的影响。尤其在干旱区,冰川河出山径流量基本上代表水资源总量。气候变暖带来的变化直接影响中下游的人口与农业安全。因而,研究冰川河对气候变化的敏感程度对于选择适当的适应对策极为关键,然而,已有的研究方法多只能定性评估,或者需要复杂的野外观测。 地质与地球物理研究所工程地质与水资源研究室博士生孔彦龙与导师庞忠和研究员以“中亚水塔”天山为研究区,采用冰川河同位素径流分割法对这一问题进行了探索。首先,他们对比了过去50年以来南北疆水资源变化,发现:虽然北疆气候变化明显强于南疆(图2a和2b),但是位于北疆的乌鲁木齐河出山径流量增加(10.0%,图2c)却远远比不上南疆的库马拉克河出山径流量的增加(38.7%,图 2d)。继而,他们分别对北疆的乌鲁木齐河流域和南疆的库马拉克河进行了同位素径流分割(图1),结果表明,乌鲁木齐河出山径流中,冰川融水比例低于9% (图2e);而库马拉克河冰川融水比例高于57%(图2f)。据此,他们得出结论,冰川河对气候变化的敏感性取决于冰川融水所占份额,冰川补给比例高的河流其水资源对气候变化更加敏感。 图1:研究区分布 图2:新疆地区气候变化(a和b)、乌鲁木齐河(c)和库马拉克河径流量变化(d)和乌鲁木齐河(e)和库马拉克河(f)径流分割结果 冰川河径流分割可以采用的不同方法,同位素方法由于能够直接厘清水分来源,因而其精度与可靠性高于普通水文学方法,而对于没有观测资料的河流(ungauged river)来说,其快速高效的优势则更为显著。论文评审过程中,审稿人认为冰川河同位素径流分割法在气候变化对水资源的影响研究方面,代表了一个新的研究方向。 该研究成果近期发表在国际水文学权威期刊 Journal of Hydrology 上(Kong et al. Evaluating the Sensitivity of Glacier Rivers to Climate Change based on Hydrograph Separation of Discharge. Journal of Hydrology . 2012, (434–435): 121–129, doi: 10.1016/j.jhydrol.2012.02.029)
个人分类: Study|2736 次阅读|2 个评论
[转载]假若我是一根喜鹊的翎毛
issacniu 2012-3-29 16:49
本是骨肉热土, 却被一峡分割, 亲人对岸相望, 竟不能把一句话诉说! 面前海水滔滔, 可是泪水涌波? 分别时年轻的妻子, 如今白了鬓角; 母亲那巴望的眼睛, 早就陷成一对深窝。 日月飞梭万次多, 补不上金瓯一缺! 苦命的牛郎织女, 虽隔着迢迢银河, 但也年年能七夕相会, 感谢那多情的喜鹊。 谁为人民做了好事, 就会编成美好的传说。 难道炎黄的子孙, 真不如一只喜鹊? 中华民族的历史, 还要把昨天续写? 昆仑山频频翘望, 日月潭声声呜咽 …… 本是骨肉热土, 如此长期分裂; 列宗列祖会怎样怒怨? 子孙后代将如何评说? 假若我是一个鹊翎, 愿在海峡上翻飞、飘落。 一九八一年国庆节于颜集村
1966 次阅读|0 个评论
[转载]图像分割软件 Berkeley Image Segmentation
yelloworld 2012-3-20 14:05
以学校名字命名的: http://berkenviro.com/berkeleyimgseg/
0 个评论
[转载]科技体制改革(3)
sunapple 2012-3-1 21:28
缺乏协调的多头管理,会导致政策相互打架、项目低水平重复,使科技资源严重浪费    王志珍: 前一段时间我们就科技体制改革问题做了一个调查,对象是中科院院士、科研单位的负责人和普通科研人员,结果有50%以上的人认为科技资源配置机制存在的主要问题,是国家部委多头管理、部门分割现象严重。   我曾注意到一个相当普遍的现象:一个研究组(或课题组)包括学生通常在10到20人之间,手里大都有10个左右大大小小不同的项目。由于一个项目有许多人分享,分到每个人的数目就不大了,因此只要有机会就一定要去争,而每个项目都需要走完全套的程序,所以,浪费在因多头管理、部门分割而造成的资源重复配置上的时间,实在是太多了。   多头管理也是导致浮躁、腐败的深层次原因之一。各个部委都在抓科技项目、搞创新工程,而且数量很大、经费很多、低水平重复严重。因为有项目就有权力,有权力就有利益,难免就会出问题,会有腐败现象发生。现在就有这样的“潜规则”:给你一个项目,你返给我几个点。如果这样下去,是很危险的。    梅永红: 在国家层次上,目前掌握和配置科技资源、制定相关科技政策的部门和单位众多。如果单从部门和行业自身发展来看,这些安排都有其合理性。但是,在如何界定各部门和单位的职能边界上,在如何避免科技资源分散重复的问题上,在如何解决政出多门的问题上,我们还没有建立起行之有效的工作机制,部门利益导向仍然深刻地影响着科技管理格局。这种局面使得有限的科技资源,特别是人力和科技投入的效率受到很大制约。   解决多头管理、协调不力的问题,应该从两方面着手:一是必须自上而下,通过对各科技管理部门自身管理职能与方式的改革,形成协调一致的科技工作格局,为科技进步和创新营造更好的宏观环境;二是要重提“举国体制”。事实上,我们通常所说的集中力量办大事的“举国体制”,并不是社会主义国家独有的体制安排,与发挥市场配置科技资源的基础性作用也不相悖。我国科学技术水平相对落后,尖端和领军人才匮乏,更需要在重点领域形成协调统一、又与市场经济有机结合的“举国体制”。    饶毅: 基础研究有很强的探索性,需要国家将经费渠道减少,而额度增加,使科学工作者,特别是45岁以下的年轻人,能真正安心、积极探索科学前沿。对于国家需求型的研究,必须有严格的要求,不能打着“满足国家需求”的旗号,做一般基础研究,结果基础和应用都没做好。   采用“举国体制”的“两弹一星”之所以能在那么艰苦的条件下实现既定目标,最重要的原因,是参与的人员怀着强烈的责任感和使命感,全身心地投入,心无旁骛。现在所谓做应用研究、“国家需求”的科研人员拿到经费后,有多少在全心全意地做申请的项目研究?不能扛着“举国体制”的大旗,挂羊头卖狗肉。
个人分类: 技术力论坛|1443 次阅读|0 个评论
[转载]Excel下拉菜单的三种方法
zhangjing121 2012-2-19 09:03
Excel设置数据有效性实现单元格下拉菜单的3种方法 一、直接输入: 1.选择要设置的单元格,譬如A1单元格; 2.选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3.在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值”和“提供下拉菜单”全部打勾→在“来源”下面输入数据,譬如“1,2,3,4,5,6,7,8,9”(不包括双引号,分割符号“,”必须为半角模式)→按“确定”就OK了,再次选择该A1单元格,就出现了下拉菜单。 二、引用同一工作表内的数据: 如果同一工作表的某列就是下拉菜单想要的数据,譬如引用工作表Sheet1的B2:B5,B2:B5分别有以下数据:1、2、3、4,操作如下: 1.选择要设置的单元格,譬如A1单元格; 2.选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3.在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值”和“提供下拉菜单”全部打勾→在“来源”下面输入数据“=$B$2:$B$5”,也可以按右边带红色箭头的直接选择B2:B5区域→按“确定”就OK了,再次选择该A1单元格,就出现了下拉菜单。 三、引用不同工作表内的数据(必须用到定义名称): 如果不同工作表的某列就是下拉菜单想要的数据,譬如工作表Sheet1的A1单元格要引用工作表Sheet2的B2:B5区域,工作表Sheet2的B2:B5分别有以下数据:1、2、3、4,操作如下: 1.定义名称:菜单栏→“插入”→“名称”→“定义”→弹出“定义名称”窗口,在“在当前工作薄中的名称”下面输入“DW”(可以自己随便明明)→“引用位置”下面输入“=Sheet2!$B$2:$B$5”,也可以按右边带红色箭头的直接选择B2:B5区域→按“添加”后再按“确定”完成第一步。 2.选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3.在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值”和“提供下拉菜单”全部打勾→在“来源”下面输入“=DW”,“DW”就是刚刚定义好的名称,按“确定”就OK了,再次选择该A1单元格,就出现了下拉菜单。
2306 次阅读|0 个评论
利用多尺度CRF在超像素的基础上做分割
ciwei020621 2012-2-16 15:25
利用多尺度CRF在超像素的基础上做分割
标题: Learning and incorporating top - down cues in image segmentation 作者: He XM; Zemel RS; Ray D 编者: Leonardis A; Bischof H; Pinz A 会议名称: 9th European Conference on Computer Vision (ECCV 2006) 会议地点: Graz, AUSTRIA 会议日期: MAY 07-13, 2006 会议赞助商: Adv Comp Vis; Graz Univ Technol; Univ Ljubljana 来源出版物: COMPUTER VISION - ECCV 2006 , PT 1, PROCEEDINGS 丛书: LECTURE NOTES IN COMPUTER SCIENCE 卷: 3951 页: 338-351 子辑: Part 1 出版年: 2006 被引频次: 6 (来自所有数据库) 其实,在看这篇文章前,我就有一个idea,等看到这篇文章我就崩溃了 这篇是上一篇的发展,所用技术感觉更加靠谱了。有两大改进: 1、不是基于像素,而是基于超像素。 超像素的概念跟基于对象的图像分析中的“object”概念相近,但是个人理解,这两个概念还不一样。区别在于level上,object应该比Superpixel要高那么一点点,而Superpixel应该是介于pixel和object之间的一个概念。superpixel更类似于patch,该单元内具有某种一致性homogeneous,可以是图像经过过分割(over-segmentation)获得。 超像素对于像素级的优势,正如对象对于像素的优势。前者都不容易受噪声干扰,后续处理的计算量降低了。 2、多尺度CRF的概念更加清晰 模型的抽象形式: 具体形式 fa是超像素与标记之间的关系 fb是相邻超像素之间的关系,用的boundary概率 fc是全局标记特征 这三级特征都是在contex特征的基础上建立的。
7913 次阅读|0 个评论
[转载]对折
yanhuasanman 2011-12-29 09:12
天空的清澈 雨用泪水洗过了 你最爱的天蓝色 被阳光折射 天桥的两侧 我们遥远相望着 时光静止那一刻 可喜可贺可怜可恨可爱的 可惜都不可能了 我把我对折 轻轻把你也对折 今生是你借我的 来生是我答应你的 越记得 越不舍 我不懂的 爱得恨得痛得 心如刀割 痛过就懂了 有什么还在螫 紧紧被回忆咬着 彩虹的第八个颜色是夜的黑色 心还是肉做的 你的吻还热热的 你睡了我还醒着 苦的涩的甜的酸的怀念的 我们回不去了 我把我对折 轻轻把你也对折 今生是你借我的 来生是我答应你的 越记得 越不舍 我不懂的 爱得恨得痛得 心如刀割 痛过就懂了 对折再对折 轻轻把梦也对折 回忆我都收好了 泪水渐渐就会干的 千纸鹤 飞走了 沿着银河 悲欢再不能把你跟我离合 别把我分割 我把我对折 轻轻把你也对折 今生是你借我的 来生是我答应你的 越记得 越不舍 我不懂的 爱得恨得痛得 心如刀割 痛过就懂了 对折再对折 轻轻把梦也对折 回忆我都收好了 泪水渐渐干了 千纸鹤 飞走了 沿着银河 悲欢再不能把你跟我离合 越不舍 越依依不舍
个人分类: 转载诗歌|2595 次阅读|0 个评论
[转载]趣题:连接多个数字串时怎样避免歧义?
wqfeng 2011-10-14 19:32
今天碰上一个非常有意思的问题。有一条通信线路,每次可以发送一个由数字 0 到 9 组成的任意长的数字串。怎样巧妙地利用这条通信线路,构造一种一次能够发送两个数字串的协议?注意到,直接将两个数字串相连是不行的,因为这将会产生歧义。如果对方收到的数字串是 1234 ,他没法知道你发送的是数字串 12 和 34 ,还是数字串 123 和 4 ,抑或是 1 和 234。 能否把第一个串的位数编码进去,比如把 12 和 34 编码成 21234 ,这样不就知道第一个数字串到哪儿截止了吗?不行,因为你不知道这个位数信息本身到哪儿截止,假如编码结果是 123456789012345 ,你就不知道第一个数字串是 1 位还是 12 位了。换一个思路,能否用几个非常特殊的数字当作分隔符呢?也不行,因为你要发送的数字串里有可能偏偏也包含了这几位数。怎么办呢? 一种非常容易想到的方法是,把两个数字串都转换为九进制,这样便把数字 9 腾了出来,它就能用作分隔符了。例如,要想发送数字串 12 和 34,只需要把 12 和 34 分别转成九进制,再在他们之间添加一个数字 9,得到数字串 13937,然后发送出去就可以了。即使要发送的数字串中有前导 0 ,问题也不大,我们可以在九进制数前面也加上相同数量的前导 0 。例如,把 012 和 0034 连在一起,也就成了 01390037 ,原始信息中的前导 0 也就很容易识别出来了。 注意到,把一个十进制数转化成九进制数,数字位数是要增加的。一个值得考虑的问题是,为了实现数字串的连接,采用上述方法需要多花费多少位数字?一个 n 位数的九进制表达,其位数大致可以记作 log(9, 10 n ) ,也就是 log(9, 10) · n ,大约等于 1.048 n 。因此,把一个 n 位数变成九进制,将会增加 0.048n 位数,似乎是相当节省了。不过,从计算机算法的角度来看,系数再小,它也是 O(n) 的;当数据规模非常大的时候,这个算法的效率并不让人满意。上述算法还有优化的余地吗? 一个优化方案是,既然首次出现的 9 一定是分隔符,后一个数字串就不必转成九进制了, 12 和 34 只需要编码成 13934 就行了。但是,渐近意义上看,所得数字串的附加长度仍然是 O(n) 。不过,如果和之前“写明第一个串的位数”的思路结合一下,我们就有了一个渐近意义上更优的方案:把第一个串的位数转化为九进制,再添加数字 9 标识出它的右边界即可。如果想要发送数字串 123456789012345 和 12345 ,就可以先数出前一个数有 15 位,再把位数本身转换成九进制 16 ,原始信息便可编码为 16912345678901234512345 。这样一来,附加长度就比原来小得多了,它只有第一个数的位数的 0.048 倍,也就是 0.048 log(n) 了。 同样是 log(n) 级别的附加长度,我们还有一种更加简单巧妙的方案。将第一个串的位数用“口吃”的方式表达出来,每个数字都重复说一遍,然后加上一对不相同的数字(比如“01”)作为结束标记。例如, 123456789012345 和 12345 就将被编码为 11550112345678901234512345 ,表示第一个数字有 15 位。这样一来,附加的长度就是 2 log(n) + 2 ,同样也是 log(n) 的级别,不过方法简便多了。而且更棒的是,这种方法能够直接扩展到一个更加一般更加困难——两个 01 串的连接! 大家还能想到什么其他有趣的方案? Update: 在写上面的文字时,我显然还想得不够多,现在看来让人很不满意。看了大家的回复,我深受启发,决定继续往下说一说。上述方法说穿了就是,用 11 来表示 1 ,用 22 来表示 2 ,一直到用 99 来表示 9 ,然后用 01 来表示分隔。这背后的核心思想其实就是:用两位数字来表示一位数字,从而扩展字符集。因此,我们还可以构造出很多类似的方案来。比方说,用 01 表示 1 ,用 02 表示 2,等等,一直到用 09 表示 9 ,最后用 10 表示分隔符。因此, 123456789012345 和 12345 就可以编码为 01051012345678901234512345 。读取编码后的数字串时,如果读到的是 0?0?0?... 的模式,那么我们都是在读取第一个数字串的位数;什么时候模式被打破了,出现了一个 10 ,第一个数字串的位数也就读完了。 注意到,扩展字符集的根本动机,就是我们希望能够在字符集中新增加一个分隔符。不过,上面的方案把字符集扩展得太大了,绝大多数新字符其实都没用,实在有些浪费。有办法能够对 {0, 1, 2, ..., 9, 分隔符} 这 11 个字符重新编码,使得编码效率又高,连接起来又不会产生歧义吗?不少网友提到了 Huffman 编码,就是专门解决这个问题的。网友 hhb 提到,扩展字符集还有一个更简单的方法:直接把分隔符用 A 来表示,然后把带有分隔符的数字串看作 11 进制数,再转成 10 进制数即可(有前导 0 的话要做保留)。 转义符的功能不也是这样吗?由于字符串无法表示出换行的概念,于是用 \n 表示换行;为了不造成歧义,又规定 \\ 表示真正的 \ 。受转义符的启发,我们就有了更好的方案,比方说用 01 表示分隔符,用 00 表示真正的 0 。解码时,每读到一个 0 ,都看看它后面跟的是什么,如果还是一个 0,表明这是一个真正的 0 ;如果是 1 ,则表示分隔符。 如果看到了新的想法,我再接着补充。 转自: http://www.matrix67.com/blog/archives/4459#more-4459
个人分类: 算法|1838 次阅读|0 个评论
部门的权力???????
ljxm 2009-3-18 13:00
中 国干什么事情,总是不得“要领”,很长时间一直在考虑一个问题,为什么有些“百姓”看来很容易解决的事情为什么一直得不到解决,什么“一代”、“二代”、“三代”人都不能解决?因为有部门利益、有阶层利益在其中,本人才疏学浅,没有研究过目前中国利益的阶层划分,但事实上应该有利益阶层的,这是不争的事实。法律、法规的出台也往往带有很强烈的部门利益色彩,一切以权力为中心,往往一件事情5-6个部门在管理,涉及到利益的事情,涉及到权力的事情犹如拉下一堆屎,立即引来一群苍蝇。涉及到责任的事情,可能就像遇到“麻风病”人一样,谁也不愿意管,谁也不愿意碰。“大部委制”的思想,还是没有抵挡住利益阶层的“博弈”,人员虽然是精简聊了,可是每个司每个局都有一个事业编制的“中心”,权利不能下放,权利可以转移,转移之后更“唐而皇之”。你有什么奈何? 所 以,重复的机构,重复的部门、类似的权利得要平衡,我们的“组织”部门,也深得我们祖先的“中庸”之道,你有、我有、全都有啊,科技部有组建“国家工程 技术 研究中心”的责任,国家发改委也有批准“国家工程研究中心”权利;科技部有批准“国建重点实验室”责任,国家发改委也要搞个批准“国家工程实验室”的权力。仔细看看管理条例、管理办法,除管理的机构不一样,涉及内容大同小异。这是举一个例子,绝没有说谁谁不好之本意。
个人分类: 生活点滴|3235 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-16 15:09

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部