开发

基于多尺度对比度x射线图像增强算法2

 基本流程 : LOG校正—>>图像分解–>>图像细节处理–>>图像重建–>>输出曲线调整. 该算法是经过多年实践完善dx增强算法 算法2是在算法1的基础上完善的, 主要解决了边阴影问题; 黑背景问题;增强过度边界溢出问题; 同时还解决了因为去栅后处理增强栅线问题; 程序使用SSE指令集和intel编译器 使得增加处理过程后不增加处理时间; 该算法对线对几乎没有影响,最大限度保持了线对; 该程序只是处理DEMO版本,只有一个默认参数, demo下载地址 http://download.csdn.net/detail/moyumoyu/9587475 处理效果: 处理DEMO

【CDP-云设计模式】第3章,4.深度健康检查模式(Deep Health Check Pattern)

1.要解决的问题 在分配负载进程时,可以在负载均衡器中使用健康检查功能来评估绑定于负载均衡器上的服务器状态。 例如:在一个包含web服务器、代理服务器、应用程序服务器和数据库服务器的配置中,让我们考虑在web服务器之前使用负载均衡器的情况。 负载均衡器能够评估web服务器的状态,并在web服务器出现故障时将其切断。然而,负载均衡器不能识别后端服务器状态,例如代理服务器、应用程序服务器和数据库服务器。 2.云模式的说明 你可以运用云负载均衡器中的健康检查功能,使用PHP、JavaServelet或类似的(程序)建立一个动态页面来执行检查。这个程序可以检查代理服务器、应用程序服务器、数据库服务器等这一类服务器的运行,并将结果返回给负载均衡器。这样就可以将系统作为一个整体进行检查。 3.实施 在AWS中,ELB的健康检查功能对HTTP(S)是否能连接到指定的URL进行了状态检查。使用这一功能,将健康检查的结果指向一个动态页面。 我们将使用一个由web服务器、代理服务器、应用程序服务器和数据库服务器组成的系统来举例说明如何实现。 (步骤) 启动ELB,并开启健康检查功能。 创建运行在应用服务器上的程序。使其在运行时需要访问数据库。 将ELB的健康检查地址设置为此程序的URL。向此URL发出请求来激活这个程序。 由ELB执行健康检查。 4.配置 5.好处 这使得你可以检查系统运行时所需的所有服务器。 根据程序如何响应健康检查,它可能会执行关闭过程(即拒绝请求),也可能会根据失效的细节返回自定义错误信息。 6.注意事项 如果有大量的服务器,那么健康检查本身可能会造成网络拥塞,所以必须仔细考虑健康检查的的时机。 如果数据库服务器成为单一故障点并发生宕机,这可能会引起一个过度反应而使得所有服务器宕机,这取决于后端服务器检查程序的编写。 同时使用数据库复制模式可以防止数据库服务器成为单一故障点。

全黑图像去除

本系列文章由 @yhl_leo 出品,转载请注明出处。 文章链接: http://blog.csdn.net/yhl_leo/article/details/50904358 昨天一个朋友,向我求助,帮忙去除掉一组遥感影像数据中,因为裁剪时产生的全黑图像,实现起来也很简单,就将工程代码提供给大家: GitHub链接:yhlleo/ImageFormatConversion 图像格式为单通道16-bit的tif,可以使用OpenCV库读取: cv::Mat curImage = cv::imread(fileName, IMREAD_UNCHANGED); 因为图像是16-bit的,所指使用图片查看器,浏览的话,肯定是全黑的。但是可以在Photoshop中,调整灰度曲线,显示图片内容(将曲线调成近似直角折线): 那些黑色图像(真的是全黑,像素值为0),判断方法比较简单,获取图像灰度最大最小值,区间范围是0,必然是全黑图像: double pMax = 0, pMin = 0; cv::minMaxIdx(curImage, &pMin, &pMax); int pRange = pMax - pMin; if ( pRange > 0 ) { // ... } else { // Black image // ... } 如果想把16-bit图像转为常见的8-bit图像,我使用的方法是这样的: if( pRange > 0 ) { for ( int i=0; iint pValue = ( static_cast<int>(*++data_cur & 0xffff) - ipMin ) * 255 / pRange; data_trans[i] = static_cast(pValue); } } 即,使用简单的线性拉伸方法:

我的暗博

暗网就是搜索引擎搜索不到的网络. 我的暗博, 搜索引擎可以搜索得到, 但是已经是加密的. 一. 实现原理很简单 1. 发表: 对博文进行加密, 然后进行十六进制可视处理, 发表到博客. 2. 阅读: 对加密博文进行解密, 转换成明文, 就可以阅读. 3. 缺点: 因为需要解密, 所以没有直接点击阅读方便. 4. 优点: 有些私人的内容, 你可以发布到网上, 别人也不知道你的秘密. 二. 暗博工具界面 图1 这是暗博工具的界面, 包含博客内容输入, 密码输入, 正向生成和逆向生成. 下载地址: http://download.csdn.net/detail/cay22/8510293 2.0地址: http://download.csdn.net/detail/cay22/9153771 三. 暗博生成的文本 [================================================] [Date = 2015-10-02 11:52:27] [Password = 12345] [SPassword = true] [PDescribe = 12345] [BDescribe = 12345] [DarkBlog = 41905908000000000098CDC397DCAB111B1C0698A33441024CA83FF07DCB629CC82C6A0181D588119AE1B2E308F9CBF95D85E22C5ECCA00D4B7114F4BCACF8B1 AFC77BC51380100E0E7AB26576EB124C94B57CB109D6DE3D9E8B629580B263EAD5F2266B370555347A3AA741D996432C2491AAE53B0DF6BA] [================================================] 把这段文本拷贝到工具, “逆向”即可还原暗博原文.

捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(一)

海康威视IPCamera图像捕获 捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(一) 捕获海康威视IPCamera图像,转成OpenCV可以处理的IplImage图像(二) 所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P) 海康威视IPCamera图像捕获方法有两种: (1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行视频抓图 (2)捕获实时流,将实时流解码成YV12,然后转换成RGB 在这篇博文里,我先介绍第一种方法。 第一种方法,关键是调用NET_DVR_CaptureJPEGPicture_NEW这个函数。关于这个函数的参数,可以在SDK中找到,我这里截个图以作说明。 这个函数Ret是用于返回该图像大小的一个参数,但是该函数的这个参数大概是没有用引用或者指针的方式来传递参数,导致返回值一直是我初始化的0,因此为后面的操作带来了些许的不便——不得不使用一个较大的内存来保存图像一定能存储的下。 NET_DVR_CaptureJPEGPicture_NEW这个函数是将单帧数据捕获并保存成JPEG,存放在指定的内存空间中。也就是内存里的JPEG。为了获得OpenCV能处理的IplImage图像,必须在内存中进行解码。 OpenCV在内存中解码的函数只有一个:imdecode,下图是imdecode的说明 该函数要求buf必须是数组或者是byte类型的vector. 因此需要对char * 类型的JPEG压缩图像进行存储格式转换。 #include #include #include #include #include "HCNetSDK.h" #include "highgui.h" #include "cv.h" using namespace cv; using namespace std; //typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)(); //PROCGETCONSOLEWINDOW GetConsoleWindow; int main(int argc, char * argv[]) { //--------------------------------------- // 初始化 NET_DVR_Init(); //设置连接时间与重连时间 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); //--------------------------------------- //获取控制台窗口句柄 //HMODULE hKernel32 = GetModuleHandle((LPCWSTR)"kernel32"); //GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow"); //--------------------------------------- // 注册设备 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("

【iOS】UIColor+Change颜色类的类目扩展

在颜色类UIColor的基础上用类目(Category)做了扩展。 主要功能方法如下: 获取颜色对象的RGB数值 -(CGFloat)getRGB; 说明:该方法在网上流行的方法上做了一些改进, 对黑灰白这些不能直接获取的颜色做了特殊处理。 对于其它无法取得RGB的值,默认返回0,0,0. 将颜色对象转换为canvas用字符串格式 -(NSString *)canvasColorString; 将颜色对象转换为Web用字符串格式 -(NSString *)webColorString; 将颜色对象变亮 -(UIColor *)lighten; 将颜色对象变暗 -(UIColor *)darken; 将两个颜色对象混合 -(UIColor *)mix: (UIColor *) c; 博文首发地址:http://blog.csdn.net/duzixi 最新代码下载地址:https://github.com/duzixi/UIColor-Change 源代码如下: UIColor+Change.h // // UIColor+Change.h // ChangeColor // // Created by 杜子兮 on 14-3-13. // Edited by 杜子兮 on 14-5-23. // Edited by 杜子兮 on 14-7-12. for Canvas. // Copyright (c) 2014年 lanou3g.com All rights reserved. // #import @interface UIColor (Change) /// 获取canvas用的颜色字符串 - (NSString *)canvasColorString; ///获取网页颜色字串 - (NSString *) webColorString; ///获取RGB值 - (CGFloat *) getRGB; ///让颜色更亮 - (UIColor *) lighten; ///让颜色更暗 - (UIColor *) darken; ///取两个颜色的中间 - (UIColor *) mix: (UIColor *) color; @end UIColor+Change.

C#设置透明按钮样式

/// /// 设置透明按钮样式 /// private void SetBtnStyle(Button btn) { btn.FlatStyle = FlatStyle.Flat;//样式 btn.ForeColor = Color.Transparent;//前景 btn.BackColor = Color.Transparent;//去背景 btn.FlatAppearance.BorderSize = 0;//去边线 btn.FlatAppearance.MouseOverBackColor = Color.Transparent;//鼠标经过 btn.FlatAppearance.MouseDownBackColor = Color.Transparent;//鼠标按下 } private void btn_MouseHover(object sender, EventArgs e) { Button btn = sender as Button; btn.FlatAppearance.BorderSize = 1; } private void btn_MouseLeave(object sender, EventArgs e) { Button btn = sender as Button; btn.FlatAppearance.BorderSize = 0; }

YUV422转BGR888(海思3516平台)

#include "hi_comm_ive.h" #include "mpi_ive.h" #pragma pack(1) typedef struct{ short type; int size; short reserved1; short reserved2; int offset; } BMPHeader; typedef struct{ int size; int width; int height; short planes; short bitsPerPixel; unsigned compression; unsigned imageSize; int xPelsPerMeter; int yPelsPerMeter; int clrUsed; int clrImportant; } BMPInfoHeader; #pragma pack() int saveBMPFile(unsigned char* src, int width, int height, const char* name){ BMPHeader hdr; BMPInfoHeader infoHdr; int ret = 0; FILE* fp = NULL; if(NULL == src) { return (-1); } fp = fopen(name,"

暗时间

暗时间 如果你有一台计算机,你装了一个系统之后就整天把它搁置在那里,你觉得这台计算机被实际使用了吗?没有。因为CPU整天运行的就是空闲进程。运行空闲进程也是一天,运行大数据量计算的程序也是一天,对于CPU来说同样的一天,价值却是完全不一样的。 大脑也是如此。 善于利用思维时间的人,可以无形中比别人多出很多时间,从而实际意义上能比别人多活很多年。我们经常听说“心理年龄”这个词,思考得多的人,往往心理年龄更大。有人用10年才能领悟一个道理,因为他们是被动领悟——只有在现实撞到他脸上的时候才感到疼,疼完了之后还是不记得时时提醒自己,结果很快时过境迁抛之脑后,等到第二次遇到同一个坑的时候早忘了曾经跌过跟头了,像这样的效率,除非天天摔坑里,否则遗忘的效率总是大过吃亏长的记性。善于利用思维时间的人则能够在重要的事情上时时主动提醒自己,将临时的记忆变成硬编码的行为习惯。 每个人的手表都走得一样快,但每个人的生命却不是。衡量一个人生活了多少年,应该用思维时间来计算。举一个极端的例子,如果一个人从生下来开始就呆在一个为他特殊建造的无菌保护室里,没有社会交往,没有知识获取,度过了18年,你会不会认为他成年了? 认为时间对每个人是均等的是一个错觉,认为别人有一天,我也有一天,其实根本不是这样。如果你正在学习一门专业,你使用自己所投入的天数来衡量,很容易会产生一种错觉,认为投入了不少时间,然而其实,“投入时间”这个说法本身就是荒唐的,实际投入的是时间和效率的乘积。你可以“投入”很多时间在一件事情上面,却发现毫无进展,因为你没有整天把你要做的事情,要学习的东西常驻在你的大脑中,时刻给予它最高的优先级。你走路的时候吃饭的时候,做梦的时候心心念念想的就是这件事情,你的CPU总是分配给它,这个时候你的思维时间就被利用到了极致,你投入的时间就真正等于了实际流逝的时间,因为你的CPU是满载的。 如果你有做总结的习惯,你在度过一段时间之后总结自己在某某领域投入了多少时间,建议千万不要粗略地去计算有多少天下班后拿起书来翻看过,因为这样你也许会发现书倒是常翻,但领悟却不见得多深,表面上花的时间不少,收益却不见得那么大。因为看书并记住书中的东西只是记忆,并没有涉及推理,只有靠推理才能深入理解一个事物,看到别人看不到的地方,这部分推理的过程就是你的思维时间,也是人一生中占据一个显著比例的“暗时间”,你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉,所有这些时间都可以成为“暗时间”,你可以充分利用这些时间进行思考,反刍和消化平时看和读的东西,让你的认识能够脱离照本宣科的层面。这段时间看起来微不足道,但日积月累将会产生庞大的效应。 能够充分利用暗时间的人将无形中多出一大块生命,你也许会发现这样的人似乎玩得不比你少,看得不比你多,但不知怎么的就是比你走得更远。比如我就经常发现一些国外的牛人们为什么不仅学习牛逼,连“业余”玩儿的东东也都搞得特牛逼,一点都不业余(上次在《How We Decide》上看到斯坦福的一个牛人,粒子物理教授,同时是世界扑克大赛的前六名保持者,迄今累计奖金拿了六百多万刀),你会奇怪,这些家伙到底哪来的时间,居然可以在不止一个领域做到卓越? 程序员们都知道,任务切换需要耗费许多额外的花销,通俗地来讲,首先需要保存当前上下文以便下次能够顺利切换回来,然后要加载目标任务的上下文。如果一个系统不停地在多个任务之间来回倒腾,就会耗费大量的时间在上下文切换上,无形中浪费很多的时间。 相比之下,如果只做一件任务,就不会有此损失。这就是为什么专注的人比不专注的人时间利用效率高得多的原因。任务切换的暗时间看似非常不明显,甚至很多人认为“多任务”是件很好的事情(有时候的确是),但日积月累起来就会发现,消耗在切换上的时间越来越多。 另外,大脑开始一件任务的时候必须要有一定时间来“热身”,这个时间因人而异,并且可以通过练习来改变。举个例子,你看了一会书之后,忽然感到一阵无聊,忍不住打开浏览器,十分钟后你想起来还要继续看书,但要回复到当时理想的状态,却需要一段时间来努力去集中精力,把记忆中相关的知识全都激活起来,从而才能进入“状态”,因为你上了十分钟网之后这些记忆已经被抑制了。如果这个“热身”状态需要一刻钟,那么看似十分钟的上网闲逛其实就花费了二十五分钟。 如果阅读的例子还不够生动,对于程序员来说其实有更好的例子:你写程序写得正high,忽然被叫去开了一通会,写到一半的代码搁在那儿。等你开完会回来你需要多久能够重新进入状态?又或者,你正在调试程序,你已经花了二十分钟的时间把与这个bug可能相关的代码前前后后都理解了一遍,心中构建了一个大致的地图,就在这时,呃,你又被叫去开了个会(:D),开完会回来,可想而知,得花上一些时间来回想一下刚刚弄清的东西了。 迅速进入状态的能力是可以锻炼的,根据我个人的经验,至少可以缩短到3-5分钟。但要想完全进入状态,却是很难在这么短的时间实现的。所谓完全进入状态,举个例子:你看了3个小时的书,或者调试了半个小时的程序之后,往往满脑子都是相关的东西,所有这些知识都处在活跃状态,换言之你大脑中所有相关的记忆神经网络都被激活了,要达到这样一种忘记时间流逝的“沉浸”状态(心理学上叫做“流体验”),不是三两分钟的事情。而一旦这种状态被破坏,无形间效率就会大打折扣。这也是为什么我总是倾向于创造大块的时间来阅读重要的东西,因为这样有利于“沉浸”进去,使得新知识可以和大脑中与其相关的各种既有的知识充分融合,关联起来,后者对于深刻的记忆非常有帮助。 要充分利用暗时间,不仅要能够迅速进入状态,另一个很重要的习惯就是能够保持状态多久(思维体力)。《The Psychology of Invention in the Mathematical Field》上有一段关于庞加莱的思考习惯的介绍,很有代表性。庞加莱经常在去海边休假或者在路上走的时候在脑海中思索数学问题,很多时候解答就在这些时候忽然闪现。虽然我和庞加莱是没法比的,但是常常也在路上想出答案,这真是一种愉悦的体验。 能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要习惯。 很多人都有这样的体验(包括我自己),工作了之后,要处理的事情一下多出了很多,不像在校园,环境简单,生活单纯,能够心无旁骛地做一件事情而不被打扰。工作之后的状况就是,首先需要处理的事情变多,导致时不时需要在多个任务之间切换;另一方面,即便能够把任务的优先级分配得比较合理,也难免在做一件事情的时候心中忽然想起另一件事还没做的焦虑来,因为没做完的事情会在大脑中留下一个“隐藏的进程”,时不时地发个消息提醒你一下,中断你正在做的事情。 因此这里就涉及到最后一个高效的习惯:抗干扰。只有具备超强的抗干扰能力,才能有效地利用起前面提到的种种暗时间。抗干扰能力也是可以练习出来的,上本科那会经常坐车,所以我就常常拿着本大部头在车上看,坐着看或者站着看都可,事实证明在有干扰的环境中看书是非常锻炼专注能力的一个办法:D 另外,经常利用各种碎片时间阅读和思考,对迅速集中注意力和保持注意力都非常有帮助。记得很久以前TopLanguage上大伙曾经有次饶有兴趣地讨论“马桶时间”的利用,包括在卫生间放个小书柜。(估计很多同学心有戚戚焉吧:D)