精华内容
下载资源
问答
  • 背景:继上一篇博文后,继续科普肿瘤放疗领域中的相关概念。文中的知识点都来自于相关的官方或相关企业文档,仅从相关行业从业者的角度来进行阐述,由于本人不是放疗医生和技师,...但单单从像素数据来看,两者同样

    背景:

    继上一篇博文后,继续科普肿瘤放疗领域中的相关概念。文中的知识点都来自于相关的官方或相关企业文档,仅从相关行业从业者的角度来进行阐述,由于本人不是放疗医生和技师,因此可能与实际工作中的环节有出入,欢迎大家来邮交流,共同进步。
    本博文开篇让我从最熟悉的DICOM文件格式说起,相较于普通的bmp图像而言,DCM是结合了患者、医院、设备等相关信息于像素数据之上的文件。但单单从像素数据来看,两者同样存在着差异:

    标准的BMP文件像素存储顺序是由左到右、由下到上,即坐标原点为图像左下角;而DICOM标准存储顺序为从左到右,从上到下,坐标原点为图像左上角。(详情参见专栏博文 DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”

    这说明bmp图像与dcm图像的坐标系是不同的,在肿瘤放疗过程中也存在着多个坐标系,详情见下文:

    放疗中的坐标系统:

    放疗治疗过程中牵涉到患者、放疗设备(直线加速器、准直器、多叶光栅MLC)、诊室等多个对象,存在着不同的视角自然就存在着不同的坐标系。

    0. 默认固定坐标系:

    IEC 61217标准中规定的坐标系都属于“笛卡尔右手坐标系”,默认横轴(Xf)由左到右,纵轴(Yf)有前到后,竖轴(Zf)由下到上。如下图所示:
    这里写图片描述

    1. 患者坐标系:

    整个DICOM标准中的坐标系亦是来源于IEC 61217标准,这其中唯一不同的就是患者坐标系。相较于IEC Patient坐标系,DICOM标准中(放疗系统)的患者坐标新是IEC Patient坐标系沿着X轴顺时针旋转90度。
    这里写图片描述

    2. 机架坐标系(射线坐标系):

    放疗过程中主要的是直线加速器,即射线发生器。这里所谓的机架(Gantry Coordinate)坐标系对应的就是射线坐标系(Beam Coordinate)。
    这里写图片描述
    注:上图中的患者坐标系指的是IEC Patient Coordinate System
    我们再看一张DICOM标准中的插图,该图是机架顺时针旋转90度后的示意图:
    这里写图片描述
    机架系统的旋转是沿着固定坐标系Yf顺时针,如下所示:
    这里写图片描述

    3. 射线过滤坐标系:

    如下图右上角(Xw,Yw,Zw)表示的即是Wedge Filter Coordinate System。
    这里写图片描述
    注:上图的S代表Radiation Source;Io代表ISOCenter;R/D F代表Radiation Field or Delineated Radiation Field

    放疗设备设计图:

    这里写图片描述

    1. 上图1代表机架(Gantry)旋转轴
    2. 上图4代表限束器(准直器)的旋转轴
    3. 上图5代表Patient Support(IEC标准患者坐标系)等中心旋转
    4. 上图14代表沿着Yf轴正向看去放射野在Xf方向的距离。
    5. 上图15代表沿着Xf轴反向看去放射野在Yf方向的距离。

    如果从上往下看(沿着Zf反向看)上述FX、FY的示意图如下:
    这里写图片描述

    参考资料:

    http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.8.8.25.6.html
    http://rtsafety.org/Download/Documents/CoordinateSystemsAndTransformations.pdf
    https://www.aapm.org/pubs/reports/OR_01.pdf




    作者:zssure@163.com
    时间:2016-04-09

    展开全文
  • %统计彩色图像素点分布情况,做成3D显示出来 就是遍历图像,然后统计以rgb值为轴建立3D坐标系,然后显示下像素点空间分布情况。 txt文本里的就是rgb值 clear all; close all; clc; data = load('D:\dso-master\...

    %统计彩色图像素点分布情况,做成3D显示出来 就是遍历图像,然后统计以rgb值为轴建立3D坐标系,然后显示下像素点空间分布情况。 txt文本里存的就是rgb值

    clear all;
    close all;
    clc;


    data = load('D:\dso-master\build\images_out\predicted_0000218.txt');
    plot3(data(:,1),data(:,2),data(:,3),'g+');
    grid on;

    展开全文
  • 随着手机像素越来越高,用手机记录身边的事(和自拍)已经变成很自然的动作,在一年里我们的手机肯定了很多照片,照片和Exif数据块中的位置可以做哪些有趣的事情?一张图片和对应的拍摄位置如果没那么...

    手机和数码相机拍的照片里除了我们能看到的RGB像元数据,还包含了拍摄时间、图像分辨率、感光值、GPS坐标等属性,记录在Exif(Exchangeable image file format)模块里。

    随着手机像素越来越高,用手机记录身边的事(和自拍)已经变成很自然的动作,在一年里我们的手机肯定存了很多照片,照片和Exif数据块中的位置可以做哪些有趣的事情?一张图片和对应的拍摄位置如果没那么多可能性,那一系列照片和位置呢?

    我们可以直观看近些年都去了哪里;可以制作和(男/女)朋友一起出去玩的地图故事;可以根据拍照时间和位置动态可视化游览路线;可以基于坐标的聚类整理照片,如拍了800张照片,把每个城市的照片批量整理到各自文件夹;……

    地理位置属于个人隐私数据,相关应用需要注意隐私问题,之前挺火的一个谣言是可以根据别人朋友圈发的图知道别人的具体位置,但实际上微信会对朋友圈的图片进行压缩,Exif里的坐标数据是会删除掉的,所以朋友圈的图片是提取不了坐标的。以下实践基于部分自己这些年拍的照片,避免侵犯其他人隐私。

    149ec4002daff12520399be5770741d3.png

    查看照片的Exif属性信

    本文主要做的:批量提照片中的坐标->可视化照片位置->制作游历故事地图

    所用到的工具:

    • Python和exifread库

    • Leaflet和两个插件

    1,批量提取照片中的坐标

    照片中的地理坐标记录在Exif块里,Exif信息以0xFFE1作为开头标记,采用TIFF格式,可以自己解析或直接用轮子exifread库,exifread是一个很方便使用的读取tiff和jpeg格式图片的Python库,在pypi上的介绍是:

    Easy to use Python module to extract Exif metadata from tiff and jpeg files.

    通过 pip install exifread安装后就可以使用了,我们现在只关心照片的坐标和拍摄时间,根据其教程探索参数和用法。

    888a63f6fc288e4780735f4527bd1d51.png

    Exifread库的使用

    写代码提取这部分数据:

    def extractExif(fpath):#提取照片坐标和拍摄时间函数

    try:

    with open(fpath,'rb') as rf:

    exif=exifread.process_file(rf)

    eDate=exif['EXIF DateTimeOriginal'].printable

    eLon=exif['GPS GPSLongitude'].printable

    eLat=exif['GPS GPSLatitude'].printable

    lon=eLon[1:-1].replace(' ','').replace('/',',').split(',')

    #'[116, 29, 10533/500]' to [116,29,10533,500] type==(list)

    lon=float(lon[0])+float(lon[1])/60+float(lon[2])/float(lon[3])/3600

    lat=eLat[1:-1].replace(' ','').replace('/',',').split(',')

    lat=float(lat[0])+float(lat[1])/60+float(lat[2])/float(lat[3])/3600

    return [lon,lat,eDate] #经度,纬度,拍摄时间

    except Exception as e:

    print(e,fpath)

    return None

    注意的是如果拍照时没有读取地理位置权限那就不好记录拍照时的坐标了,所以使用时需要做一个判断。调用上面的函数批量取一个文件夹下照片的坐标:

    wpt='J:/DS_refine/SQL-lyn/exifExtract/image' #图片文件路径

    latLons=[]

    for root, dirs, files in os.walk(wpt):

    print(len(files))

    for f in files:

    exif=extractExif('{0}/{1}'.format(wpt,f))

    if exif:

    exif[2]=exif[2]+' '+f

    latLons.append(exif)

    else:

    print(f,'exif is None')

    有了照片和对应的位置,可以做可视化讲故事了。下面的实践需要了解一些前端HTML和JavaScript知识。

    2,在地图中展示坐标

    直接展示地理点坐标有很多工具,百度/高德地图的API、Echarts、Leaflet、OpenLayers及Mapbox等。

    这里用Leaflet框架和 marker-clustering.js 实现坐标点展示和缩小时点聚合的效果,这样能适应各种缩放层级。效果如下:

    a952beb039644041882f35942ac27076.png展示照片坐标效果图

    实现方式是在前端的html页面里引入 leaflet.jsleaflet.markercluster-src.js,对map元素进行配置和设置好坐标数据,把html文件配置好之后,把数据写入js文件再调用就好。基于1中提取的坐标,保存为js文件,然后在浏览器打开html文件,就是上图中的效果了。另外需要说明的是,这些标记点(marker)点击之后都是能看到具体的文本的,展示的文本就是title里的内容。

    id="map" style="width:100%; height:650px;">

    75723943200d96569c93c3098107fe7d.png所调用文件及结构展示

    而把这些坐标放到百度地图的效果如下:

    b3a9e757b74a09703eb7a3f93e379a23.png

    百度地图的点坐标可视化

    坐标多的话就是密密麻麻的红点。

    百度地图中采用的坐标需要是百度坐标系(bd-09),而我们提取的坐标是GPS坐标,用的是WGS84坐标系,需要做转换,可以调用coordTransform_py进行转换,高德地图采用的是火星坐标系,也需要进行转换。

    只是展示坐标不怎么有趣,下面做一个左侧图文描述右侧可视化坐标的效果。

    3,游历故事地图

    给那些年去过的地方写一个地图游记。示例效果如下:

    fbcb2fcab04c7c0386cb438a70d7efbb.png那些年去过的地方

    还是用之前提取的坐标和Leaflet框架。用到的插件是storymap.js,同样引用js之后,改变其中的坐标数据,因为是讲一个故事,具体内容当然按自己想讲述的写,将 data-place="bodo">中的bodo和js代码中markers里的bodo对应好就好,例如bodo改为beijing。

    var markers = {

    beijing: {lat:39.886426, lon: 116.404762, zoom: 6},

    tianjin: {lat:39.134594, lon: 117.191961, zoom: 7},

    fuyang: {lat:32.645140, lon: 116.268333, zoom: 7},

    ningbo: {lat:29.763531, lon: 121.898233, zoom: 8},

    liuzhou: {lat:24.313703, lon: 109.406884, zoom: 7}

    };

    4,整合聚类点到游历地图里

    在我们做的游历地图里增加点聚类的效果,一个简单做法是在storymap.js里增加对markercluster.js的调用,从而可以用markerClusterGroup() 重写基本的marker标记点类型。效果如下:

    f289f4ed496098199d26278eed17eb1d.png

    地图故事效果图

    在html里可以根据自己的想法增加更多的内容,例如具体的地址文本,只需要调用百度/高德地图的Web服务 API中的逆地理编码服务就可以实现,逆地理编码就是指将经纬度转换为详细结构化的地址,如把WGS84坐标系的坐标[116.421046,39.903004]逆地理编码对应北京市东城区北京站。

    也可以继续探索更多的Leaflet插件。

    另外可以换底图,例如换成Satellite卫星底图,改map初始化时地图瓦片图层的调用url就行 L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png',效果如下,是不是也很生动呢?

    3c35325fb888e72df91414ec23816631.png

    用Satellite底图的效果

    空间位置可以做很多分析和很多有趣的事情,Python也是很强大的工具,仅需要发挥想象力。

    参考资料

    • ExifRead :便捷读取Exif的Python库

    • Leaflet:便捷友好的交互地图开源js库

    • markercluster.js:地图标记点聚类库,Leaflet插件

    • storymap.js:地图上的故事,Leaflet插件

    一些代码可回复 照片地图 获取。

    展开全文
  • 功能介绍:对文件夹下的图片存储指定坐标点的像素值至txt文件中~ 每日一道理 记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命...

    时间紧张,先记一笔,后续优化与完善。

        功能介绍:对文件夹下的图片存储指定坐标点的像素值至txt文件中~

        每日一道理
    记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命承诺的余音,感到岁月的流转在渐渐稀释我的年少无知,我愿自己是一只上足了发条的时钟,在昼夜不停的流转中留下自己充实的每一刻。
    // 存储文件夹下图片RGB值至文本中.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<stdio.h>
    #include"stdlib.h"   //system须要调用这个
    #include "stdafx.h"
    #include "cv.h"
    #include "highgui.h"
    #include <string>
    #include<windows.h>
    #include <WinBase.h>
    #include <ctime>
    #include "highgui.h" 
    #include <iostream>
    #include <fstream>
    #include <ml.h>     
    using namespace std;
    int main( int argc, char** argv )
    {
    	int image_id = 1;
    	char filename[256];
    	char filename2[256];
    	char winname[256];
    	IplImage *image=0,*imageresize=0;  
    	sprintf(filename , "D:\\My Documents\\Visual Studio 2008\\Projects\\存储文件夹下图片RGB值至文本中\\截图\\%d.bmp" , image_id );
    	IplImage* img = cvLoadImage(filename);
    	ofstream fout("Bmat.txt");  /* 保存样本 */
        CvScalar s;
    	cout<<"\n 开始保存咯\n";
    	int q=0;
      
    	while(img)
    	{
    	
    	sprintf(winname , "D:\\My Documents\\Visual Studio 2008\\Projects\\存储文件夹下图片RGB值至文本中\\截图\\%d.bmp" , image_id );
    	IplImage* img = cvLoadImage(winname);
    	 CvScalar s;
    	 if (!img)//若无此步,会在最后一个循环时由于下一句的img变量不存在而报错!
    		 break;//若无此步,会在最后一个循环时由于下一句的img变量不存在而报错!
    	 s=cvGet2D(img,3,19); //获得src图像中坐标为(i,j)的像素点的值
    	 //s.val[0] 代表src图像BGR中的B通道的值~
    	 fout<<s.val[0];
    	 fout<<"\t";
    	 fout<<s.val[1];
    	 fout<<"\t";
    	 fout<<s.val[2];
    	 fout<<"\t";
    	 fout<<"1\n";
         cvSet2D(img,3,19,s);       //set the (i,j) pixel value
    	 q++;
    
    	    s=cvGet2D(img,6,19); //获得src图像中坐标为(i,j)的像素点的值
         //s.val[0] 代表src图像BGR中的B通道的值~
    	 fout<<s.val[0];
    	 fout<<"\t";
    	 fout<<s.val[1];
    	 fout<<"\t";
    	 fout<<s.val[2];
    	 fout<<"\t";
    	 fout<<"1\n";
         cvSet2D(img,6,19,s);       //set the (i,j) pixel value
    	 q++;
    
    	    s=cvGet2D(img,5,25); //获得src图像中坐标为(i,j)的像素点的值
         //s.val[0] 代表src图像BGR中的B通道的值~
    	 fout<<s.val[0];
    	 fout<<"\t";
    	 fout<<s.val[1];
    	 fout<<"\t";
    	 fout<<s.val[2];
    	 fout<<"\t";
    	 fout<<"1\n";
         cvSet2D(img,5,25,s);       //set the (i,j) pixel value
    	 q++;
    	 cvReleaseImage(&img);
    	image_id++;
    	sprintf(filename , "D:\\My Documents\\Visual Studio 2008\\Projects\\存储文件夹下图片RGB值至文本中\\截图\\%d.bmp" , image_id );
    	}
    	
    		
    		
    	
    	cout<<"\n 保存终了! \n";
    	cout<<"矩阵一共有"<<q<<"行"<<'\n';
    	system("PAUSE");  
    }

    文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
      写字楼里写字间,写字间里程序员;
      程序人员写程序,又拿程序换酒钱。
      酒醒只在网上坐,酒醉还来网下眠;
      酒醉酒醒日复日,网上网下年复年。
      但愿老死电脑间,不愿鞠躬老板前;
      奔驰宝马贵者趣,公交自行程序员。
      别人笑我忒疯癫,我笑自己命太贱;
      不见满街漂亮妹,哪个归得程序员。

    --------------------------------- 原创文章 By 图像和图片 ---------------------------------

    转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/23/3095861.html

    展开全文
  • ###把DEM数据(.tif)获得栅格数据对应的经纬度及高程信息,到地理数据库一、预处理工作栅格数据由地理坐标系转投影坐标系,使单位从度变为米在Arcmap中转换:例如从 WGS_1984 转 Beijing_19541、加载要转换的数据...
  • 漫反射颜色值 = (光源的rgb*定义的漫反射强度rgb)*max(0,dot(基于世界坐标系的模型法线,光源在世界空间坐标系下的位置)) 先解释一下: (光源的rgb*定义的漫反射强度rgb) 意味着:光源的rgb,和强度rgb的一种单...
  • opencv相机去畸变详解

    2020-11-05 11:41:57
    标签:图像矫正的本质,其实就是重投影的过程,即【像素坐标→物理坐标→像素坐标】的过程。只不过在重投影过程中我们可以改变投影矩阵(修改后的投影矩阵我把它称为扩展投影矩阵)从而模拟镜头缩放和平移的效果。 ...
  • c#简单贪吃蛇游戏的思想

    千次阅读 2012-05-30 13:44:02
    就是用graphic画出来的,用个timer控制,我已经封装成一个类了。   public class Game { int _direction; ...//表示蛇的坐标,注意里面的不是蛇的像素坐标而是格子的位置坐标 /*格子
  • 先来看一张网上广为流传的《杀戮地带2》典型的Deferred Shading的G-...不Position,而由depth和屏幕像素坐标反推出来。參考:http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-...
  • 题目描述 找出图中所有像素满足要求的一个像素,并输入其位置和对应像素值,如果不唯一则输出not unique,不存在输出not exist. 题目分析 我们可以使用增量数组,将某个像素8...我们将每个像素值出现的次数和像素
  • 首先采用预标定的方法标定出图像中心位置,然后根据帧图像坐标和世界坐标之间的对应关系使用正交矩阵的约束条件来求解,在此算法中假设尺度因子为1,并且不考虑透镜畸变。所提出的算法用数字仿真图像及真实的图像...
  • tag标签,用来标注dicom中的数据类型 例如pixcel spacing的tag是(0028,0030),里面的数据是x,y向的像素之间的距离,这样就能根据像素得到当前切片在xy平面的坐标值。
  • 深度纹理 深度纹理实际就是一张渲染纹理,只...顶点坐标转化到NDC(归一化的设备坐标)下的坐标的z分量就是顶点的深度值。NDC中,z分量范围在[-1,1],为了让z分量可以到一张纹理中,需要使用公式将z分量映射: ...
  • Shader入门精要项目资源: ... 一、凹凸映射、法线纹理 法线纹理是存储法线数据的,即模型上每一个...区别:模型空间下的法线是相对于模型空间坐标系的,切线空间下的法线是相对于顶点切线空间坐标系的。 具体说...
  • 数组重绘

    2012-10-19 11:38:19
    线,要用到两组坐标,我们用数组的是坐标而已,等到调用重绘方 法时再用drawline重绘直线。但还有好多工具要用的,矩形,圆,刷 子,橡皮等,这些工具,我们如果一个一个的写,非常麻烦,所以二...
  • 深度图CameraDepthTexture,网上的介绍一大堆,很多人可能会使用深度图并且能够实现一定的...(1)图中的是像素d:[0,1];归一化的NDC坐标的Z值是[-1,1],将NDC坐标转化为[0,1]就是存在深度图中的值 (2)NDC坐标
  • function S = get_convex_S(C,vx,vy) %该函数实现的功能为指定图像中多边形的顶点,返回属于该凸...%输入的C是结构,vx vy是数组的是顶点坐标。 %输出S为标签矩阵大小与C中的一个分量的大小相同。 %[minx,~] = ...
  • 图形模式计算点坐标太难了,于是自己拿画图画了一个像素五角星,给它变成了行和列的相对坐标缓冲区里,用xlat查表来简化代码,免得都是重复画点代码又臭又长。。。 .model tiny .code .startup m...
  • 以下内容来自正点原子的FPGA开发指南,...其中,时钟分频模块负责产生像素时钟,VGA驱动模块产生行场同步信号及像素点的纵横坐标,VGA显示模块输出图像数据,ROM用于 储需要显示的图片。 VGA显示模块中的ROM是通过例
  • 速度映射图中了第个像素的速度,然后使用这个决定模糊的方向和大小。可以把场景中物体的速度渲染到一张纹理中。但这个要改场景中所有物体的Shader,比较麻烦。 方法二: 利用深度纹理在片元着色器中为每个像素 ...
  • 随着手机像素越来越高,用手机记录身边的事(和自拍)已经变成很自然的动作,在一年里我们的手机肯定了很多照片,照片和Exif数据块中的位置可以做哪些有趣的事情?一张图片和对应的拍摄位置如果没那么...
  • %在指定路径下原图片I=rgb2gray(P);%获得灰度图像a=100;b=100;l=0.5;%栅格大小B=imresize(I,[a/lb/l]);%转化为指定像素大小J=floor(B/255);longitude=0:a;latitude=0:b;%坐标轴控制axes('GridLineStyle','-');set...
  • 随着手机像素越来越高,用手机记录身边的事(和自拍)已经变成很自然的动作,在一年里我们的手机肯定了很多照片,照片和Exif数据块中的位置可以做哪些有趣的事情?一张图片和对应的拍摄位置如果没那么多可能性,.....
  • 随着手机像素越来越高,用手机记录身边的事(和自拍)已经变成很自然的动作,在一年里我们的手机肯定了很多照片,照片和Exif数据块中的位置可以做哪些有趣的事情?一张图片和对应的拍摄位置如果没那么多可能性...
  • 支持代码和自动导出具有所需像素密度的图像的支持点 相对图层:获取父级Artboard或父级组的坐标 设备支持:准备用于台式机/ iOS / Android原型 2.导出原型 您是否曾使用Keynote做原型设计? 完全相同,但是就像您...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

存像素坐标