值域

成熟的医学影像“调窗”(window-leveling)算法详解

♀尐吖头ヾ 提交于 2020-03-28 11:10:20
之前一直以为自己对窗宽窗位的调节已经明了,但是随着开发中的应用,发觉对这部分知识的理解实际上还是存在很多疑问的,尤其是在设计打印方面,曾经的自以为明了实际上只是自己把问题简单化了而已。学无止境,看到自己的进步还是很开心的。 图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 CT 里的例子有软组织、骨头、脑组织、肺、腹部等等。 技术问题: 显示器往往只有 8-bit, 而数据有 12- 至 16-bits。 如果将数据的 min 和 max 间 (dynamic range) 的之间转换到 8-bit 0-255 去,过程是个有损转换,而且出来的图像往往突出的是些噪音。 针对这些问题,研究人员先提出一些要求 (requirements),然后根据这些要求提出了一些算法。这些算法现在都很成熟。 要求一:充分利用 0-255 间的显示有效值域 要求二:尽量减少值域压缩带来的损失 要求三:不能损失应该突出的组织部分 算法分析: A. 16-bit 到 8-bit 直接转换: computeMinMax(pixel_val, min, max); // 先算图像的最大和最小值 for (i = 0; i < nNumPixels; i++) disp_pixel_val = (pixel_val - min)*255.0/(double)

关系数据库标准语言SQL(一)

北城余情 提交于 2020-03-04 08:51:24
声明:最近在准备考试,故整理数据库笔记。 关系数据库标准语言SQL(一) SQL概述  SQL是一种完整地数据库语言,其功能涵盖数据定义、数据操纵、数据控制等数据管理的主要需求  但SQL语言相对比较简洁,其核心动词只有9个  CREATE,ALTER,DROP  SELECT,INSERT,DELETE,UPDATE  GRANT,REVOKE 数据定义 SQL的数据类型  CHAR(n):定长字符串,长度n由用户指定。省略n时,长度为1,CHAR的全称是CHARACTER。  VARCHAR(n):变长字符串,最大长度n由用户指定,VARCHAR的全称是CHARACTER VARYING。  定长和变长字符串的差别主要表现在前者需要固定长度的空间,而后者占用的空间在最大长度范围内是可改变的。  BIT(n):定长二进位串,长度n由用户指定。省略n时,长度为1  BIT VARYING(n):变长二进位串,最大长度n由用户指定数据类型。  INT:整数,其值域依赖于具体实现。INT的全称是INTEGER。  SMALLINT:小整数,其值域依赖于具体实现,但小于INT的值域。  DEC(p, d):p位有效数字的定点数,其中小数点右边占d位。DEC的全称是DECIMAL。  FLOAT(n):精度至少为n位数字的浮点数,其值域依赖于实现。  REAL

重构——代码的坏味道

≯℡__Kan透↙ 提交于 2020-02-19 12:13:54
1. Duplicated Code( 重复的代码) 臭味行列中首当其冲的就是Duplicated Code。如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。 最单纯的Duplicated Code就是[同一个class内的两个函数含有相同表达式(expression)]。这时候你需要做的就是采用Extract Method提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。 另一种常见情况就是[两个互为兄弟(sibling)的subclasses内含有相同表达式]。要避免这种情况,只需要对两个classes都使用Extract Method,然后再对被提炼出的代码使用Pull Up Method,将它推入superclass内。如果代码之间只是类似,并非完全相同,那么就得运用Extract Method将相似部分和差异部分割开,构成单独一个函数。然后你可能发现或许可以运用Form Template Method获得一个Template Method设计模式。如果有些函数以不同的算法做相同的事,你可以择定其中较清晰的一个,并使用Substitute Algorithm将其它函数的算法替换掉。 如果两个毫不相关的classes内出现Duplicated Code,你应该考虑对其中一个使用Extract Class

AI-Constraint Satisfaction Problems (CSP)

心已入冬 提交于 2020-01-16 01:42:27
Constraint Satisfaction Problem 在搜索算法中,我们关心的是从初始节点到目标节点的一条路径;而在约束满足问题中,我们没有初始状态,只关心 goal 而不在乎 path。 Planning: sequences of actions Identification: assignments to variables Constraint Satisfaction Problems (CSPs) are specialized for identification problems 我们可以把 CSP 看成是特殊的搜索问题。对于一般的搜索问题来说,State is atomic or indivisible, known as a “black box” without internal structure,而在 CSP 中 State is represented as a feature vector ;在搜索问题中 Goal test can be any function over states,而CSP 中 Goal test is a set of constraints to identify the allowable feature vector。 我们来仔细看看 Feature Vector,它是由 A set of k

我们来聊聊分布式

会有一股神秘感。 提交于 2019-12-17 09:23:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 大型主机时代已经井喷,集中式时代已经无法满足日益健壮复杂的业务和需求,互联网时代的到来,使得由集中式到分布式的革命犹然而生,网络化,微型化发展步伐迫切,分布式的需求越来越能适应需求,一线电商平台迈入分布式时代。 分布式官方定义为:所谓分布式系统顾名思义就是利用多台计算机协同解决单台计算机所不能解决的计算、存储等。 问题一、 将一个单机问题使用分布式解决,首先要解决的就是如何将问题拆解为可以使用多机分布式解决,使得 分布式系统中的每台机器负责原问题的一个子集。 1.特点: 分布性:分布式多台计算机在空间上可随意分布,机器的分布情况可以随时调整 对等性:分布式系统的计算机没有主从之分,没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的,每个节点都是用 副本 的形式来数据冗余的方式保证数据的持久化。 并发性:同一个分布式系统的的多个节点会操作一份共享的资源和数据的分布式存储,如何高效准确的协调控制分布式并发成为了一个难题。 缺乏全局时钟:典型的分布式系统由多台计算机在空间上随意分布的多个进程组成,进程之间通过消息来进行相互通信,很难保证一个次顺问题,比如分布式中的全局唯一ID如何生成等等问题。 2.环境: 通信异常:分布式可以说是多个节点之间依靠不稳定的网络进行通信

常见函数的融合转化

不想你离开。 提交于 2019-12-06 06:55:28
前言 三角函数,齐次函数,二次函数,对勾函数,幂函数等纠缠融合在一起,在判断函数的单调性和值域(或最值)时经常出现,现对其作以归纳总结。 模板函数[基础] 二次函数 对勾函数 高阶融合[转化] 复合函数 分式函数 三角函数 引例 求函数 \(f(x)=sinx+cosx+sinxcosx\) 的值域。【三角换元,典型例题】 分析:令 \(sinx+cosx=t\) ,则可知 \(t\in[-\sqrt{2},\sqrt{2}]\) , 则由 \((sinx+cosx)^2=t^2\) 得到 \(sinxcosx=\cfrac{t^2-1}{2}\) , 故此时原函数经过换元就转化为 \(f(x)=g(t)=t+\cfrac{t^2-1}{2},t\in[-\sqrt{2},\sqrt{2}]\) , 这样就和例1是同一类型的了。 \(f(x)=g(t)=\cfrac{1}{2}(t+1)^2-1\) , \(t\in[-\sqrt{2},\sqrt{2}]\) , \(f(x)=g(t) \in [-1,\cfrac{2\sqrt{2}+1}{2}]\) 引例 如求函数 \(y=\cfrac{sin\alpha\cdot cos\alpha}{sin\alpha+cos\alpha},\alpha\in [0,\cfrac{\pi}{2}]\) 的值域问题。 分析

js获取时间,并转换格式

点点圈 提交于 2019-12-04 11:09:00
获取当前时间 new Date() var myDate = new Date(); //毫秒,1970.1.1开始 myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) // 所以获取当前月份是myDate.getMonth()+1; myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当前小时数(0-23) myDate.getMinutes(); //获取当前分钟数(0-59) myDate.getSeconds(); //获取当前秒数(0-59) myDate.getMilliseconds(); //获取当前毫秒数(0-999) myDate.toLocaleDateString(); //获取当前日期 var mytime=myDate.toLocaleTimeString(); //获取当前时间 myDate.toLocaleString( ); //获取日期与时间 ~~

BZOJ3524:[POI2014]Couriers

馋奶兔 提交于 2019-12-03 17:09:38
浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3524 假设数列不是一开始就给你的,而是一次一次修改操作让你插入数值xx,而询问是问你从第L次插入到第R次操作间,有没有哪个数值插入次数超过(R−L+1)/2,把题意这么一转化,就很好用主席树写了。 我们可以在值域上建立主席树,每个结点统计值域在[l,r]内的数字有多少个。那么只需要用第r个版本的主席树的cnt减去第l−1个版本的主席树的cnt,就是操作[L,R]里插入了多少次值域在[l,r]的数字。如果[l,mid]的次数大于(R−L+1)/2那么答案就在[l,mid],同理可以去判断答案是否在[mid+1,r]内,如果都不满足,那么就不存在这样的数值,直接返回0就行了。 时间复杂度:O((n+m)logn) 空间复杂度:O(nlogn) #include <cstdio> using namespace std; const int maxn=5e5+5; int n,m; int rt[maxn]; int read() { int x=0,f=1;char ch=getchar(); for(;ch<'0'||ch>'9';ch=getchar())if(ch==

学习重构(4)-重新组织数据

柔情痞子 提交于 2019-12-03 13:42:04
1. Self Encapsulate Field(自封装值域) 你直接访问一个值域,但与值域之间的耦合关系逐渐变得笨拙。为这个值域建立取值/设值函数(get/set),并且只以这些函数来访问值域。 应用场景:其实这种为每个变量提供两个操作函数的做法并不是百分百可取的,这样做的一个好处就是做到数据存储和使用隔离,尤其对于对象数据的保护是非常好的,可以返回给调用方一个数据拷贝,不用担心自己的数据会被篡改。但是也有不好的地方,就是会带来非常多的小函数,无形中增大了类的体量。 示例: private int _low, _high boolean includes (int arg) { return arg >= _low && arg <= _high; } 重构为: private int _low, _high boolean includes (int arg) { return arg >= getLow() && arg <= getHigh(); } int getLow() {return _low}; int getHigh() {return _high}; 2. Replace Data Value with Object(以对象取代数据值) 将一些数据按照一定的规则或特征整合到一个对象中 应用场景:开发代码初期,仅需要一些简单的数据,比如一个人的基本信息:姓名

学习笔记:可持久化线段树(主席树):静态 + 动态

匿名 (未验证) 提交于 2019-12-02 23:56:01
线段树。线段树分享可以看: @秦淮岸 、 @ZYzzz 、 @妄想の岚がそこに 树状数组。 \(BIT\) 分享可以看: @T-Sherlock 、 Chicago 、 @weishengkun 权值线段树:相当于将线段树当成一个 Ͱ ,其中的每一个点所代表的区间相当于 一段值域 。维护的值为这段值域中的一些信息。 例如该图,节点 \(2\) 代表的是值域为 \([1, 2]\) 的区间,节点 \(6\) 代表值域为 \([3, 4]\) 的区间... 可持久化概念: 可持久化实质上就是存储该数据结构 所有的历史状态 ,以达到高效的处理某些信息的目的。 题目链接 :给定长度为 \(N\) 的序列 \(A\) ,有 \(M\) 次询问,给定 \(l_i, r_i, k_i\) ,求在 \([l_i, r_i]\) 区间内第 \(k_i\) 小的数是多少。 \(N <= 10^5, M <= 10^4\) 我们可以建立一颗权值线段树,每个点存储的信息为 该值域区间存在的数的个数 。 因为线段树的性质,所以每个点的左子树的值域区间 $ <= $ 右子树的值域区间。 所以我们先看左子树区间有多少个数,记为 \(cnt_{left}\) 。 如果 \(k_i <= cnt_{left}\) ,说明第 \(k_i\) 小的数一定在左子树的值域内,所以问题便转换为了“在左子树的值域内找第 \(k