【转】胶片曝光时的排版!!!!!!!

这个本来没啥 不是什么算法 绝技。 都不值得一提。

其实这个是医学影像胶片曝光时排版的一个逻辑。

dicom标准第三部分 主要是讲IOD定义 在第166页有这样的描述:

表C.13.5-1图象盒象素描述组件
属性名称    标记          说明
图象位置    (2020,0010)     基于图象显示格式(2010,0010)的胶片的图象位置。
参阅C.13.5.1的规范。

这个所谓的“基于图象显示格式(2010,0010)的胶片的图象位置”到底是啥意思呢 ?还是像往常一样拿个实例瞧瞧:
20 20 10 00     ............  ..
00000010    02 00 00 00 02 00
20 20 10 00     ............  ..
00000010    02 00 00 00 03 00

dicom数据元素的结构就不多说了哈 详情请查看dicom标准。只看最后两位,可见这个所谓的“基于图象显示格式(2010,0010)的胶片的图象位置” 就是一个个的从前到后的排序。从设备工作站发送胶片曝光作业的时候 根据dicom协议 图像传输 那么它就是以这种 “序列”的方式发送的。
再看dicom标准另外一段 第三部分167页 :

C.13.5.1图象位置


胶片中图象的位置;图象位置序列的编码是基于选择的图象显示格式
(2010,0010)。图象位置序列以值1递增。
图象位置(2020,0010)定义如下:
-    标准显示格式:                 图象盒序列是主要行顺序(从左到右或从上到下);左上图象位置等于1。
-    行显示格式:                    图象盒序列是主要行顺序(从左到右或从上到下);左上图象位置等于1。
-    列显示格式:                    图象盒序列是主要列顺序(从左到右或从上到下);左上图象位置等于1。
-    SLIDE显示格式:             图象盒序列是主要行顺序(从左到右或从上到下);左上图象位置等于1。
-    SUPERSLIDE显示格式:图象盒序列是主要行顺序(从左到右或从上到下);左上图象位置等于1。

关于ImgBox 的几种方式的细节我们暂时不去管 只管第一种 ,因为就我遇到的 90%以上都是 “标准显示格式”在胶片曝光dimse的过程中 createFilmBox 的时候 会收到一个参数 command元素0x20100010, 它的值是类似这样STANDARD\1,1  这个standard 就是表示 这是一个“标准显示格式” 逗号分隔开的两个数字 第一个是列数 第二个是行数。标准显示格式就是: (在一个指定行数列数的网格里把图像按从左到右从上到下的方式排列)
如图:

说到底我们要实现的就是根据dicom标准 把这种依次编号的图像拼接成 一个整幅的网格图像 让它打印出来看上去跟工作站上阅片时的所见即所得,可以根据编号获取指定图像 可以根据几行几列或许指定图像 可以根据编号获知他是第几行第几列 可以根据第几行第几列获知他的编号。就这样简单。

来简单分析下,可以通过STANDARD\colNum,rowNum 来确定行数跟列数。这就容易了

他是一个“持续堆叠的过程”

第一行堆满了堆第二行 从左往右的不断堆。
以x表示列 y表示行 从1开始,num表示编号 从1开始 , 可以得出这样的结论:
for(1 to num)
{
    if(num%colNum!=0)//不能除尽
     {
        y=num/colNun+1;
         x=num%colNum;
    else
     {
        y=num/colNun;
        x=colNum;
     }
}
你能理解这个过程么 ?什么, 能用么 你可以验证下:
num=7
7%3!=0
{
  y=7/3+1=>3
  x=7%3=>1
}

num=6
6%3==0
{
  y=6/3=>2
  x=3=>3
}

num=5
5%3!=0
{
  y=5/3+1=>3
  x=5%3=>2
}

为什么要确定x跟y呢,因为输出的时候要给单幅图像定位 就是左上角 有了x跟y 才能够实现。可以有一个image的数组 用来存储接收到的图像 它们按照编号从前到后排列。

解决一个问题了

还有另外一个问题 图像的缩放。

如果我假设输出区域是宽度=297 高度=420。胶片的分格是4行3列 。那么单幅图像的尺寸是 宽度=297/3 高度=420/4 但是每个分格的图像尺寸通常是不固定的,就像普通的看图软件都有个显示比例叫“缩放到显示区域” 我们要做的就是这个 这一过程可以用这个图说明:

预先就设定图像都有两种等比例缩放尺寸 高度对齐(让高度跟可显示区域相等) 宽度对齐(让宽度跟可显示区域相等)。
这里有一个简单的等比例公式 缩放前后
宽度对齐情况下:
显示区域宽(缩放后的宽度)/原图宽=缩放后的高度/原图高
高度对齐情况下:
显示区域高(缩放后的高度)/原图高=缩放后的宽度/原图宽
分别得出两种情况另一边的长度
显示区域宽(缩放后的宽度)*原图高/原图宽=缩放后的高度
显示区域高(缩放后的高度)*原图宽/原图高=缩放后的宽度

然后对两种情况进行判断,如果哪种情况缩放后的图像区域超出了显示范围 则被否决。
如下图 蓝色框代表图像 ,黑色框代表显示区域:

就这样就达到了适应显示范围的等比例缩放。简单吧。
怎么把上述思路整合 然后用代码实现,首先我们得定义一个类 这个类叫Paper 相当于一张胶片 他是待打印区域 。
然后相应的要有 行数列数 显示区域高度宽度 等变量, 还要有一个image数组用来存储顺序编号排列的图像。

 

 1 public class Paper2 {3     int row, col;//行数 与 列数4     int width, height;//胶片宽度 高度5     IList<Image> images;//顺序编号的图像6 7     public Paper(int _width, int _height, int _row, int _col)8     {9         width = _width; height = _height; row = _row; col = _col;
10         images = new List<Image>(row * height);
11     }
12     //初始化显示区域
13     public Paper(int _row, int _col)
14     {
15         //width = 345 * 9; height = 420 * 9; row = _row; col = _col;//14INx17IN
16         width = 297 * 9; height = 420 * 9; row = _row; col = _col;//A3
17         images = new List<Image>(row * height);
18     }
19     //新增图像
20     public void addImg(Image img)
21     {
22         if (images.Count >= row * col)
23             return;
24         else
25         {
26             images.Add(img);
27         }
28     }
29 }

 

这相当于又是定义了一个数据模型的框架 初始化一个实例代表输出一张新的胶片。面向对象的分析设计是多么的好 哇哈哈。
材料有了 。下面这个函数才是重头戏,用于实现第一部分 分析的所有逻辑[胶片排版 跟 图像缩放],请对照第一部分的说明来看:

 

 1 //排版后的输出2 //排版方式为从上到下从左到右3 public Image layout()4 {5     Image layouted = new Bitmap(width, height);6 7     Graphics g = Graphics.FromImage(layouted);8     g.Clear(Color.Green);9     for (int i = 0; i < images.Count; i++)
10     {
11         int _row, _col;
12         if ((i + 1) % col != 0)
13         {
14             _row = (i + 1) / col + 1 - 1;  //    _row = (i + 1) / col + 1 - 1;
15             _col = (i + 1) % col - 1;  //    _col = (i + 1) / col - 1;
16         }
17         else
18         {
19             _row = (i + 1) / col - 1;
20             _col = col - 1;
21         }
22         if (_col < 0)
23         {
24             _col = 0;
25         }
26         if (_row < 0)
27         {
28             _row = 0;
29         }
30         GraphicsUnit u = GraphicsUnit.Pixel;
31         RectangleF recSrc = images[i].GetBounds(ref u);//原图像大小
32         RectangleF recDst;//缩放后大小并调整偏移位置
33 
34         //宽比宽 =长比长 超出的那一边需要固定长度 缩小以调整到视野内
35         float recH = ((width / col) * recSrc.Height) / recSrc.Width,
36             recW = ((height / row) * recSrc.Width) / recSrc.Height;
37 
38         if (recW > (width / col))//宽度超出 固定宽度调整高度
39             recDst = new RectangleF((width / col) * _col + 0,
40                 (height / row) * _row + ((height / row) - recH) / 2,
41                 (width / col), recH);
42         else//高度超出 固定高度调整宽度
43             recDst = new RectangleF((width / col) * _col + ((width / col) - recW) / 2,
44                 (height / row) * _row + 0,
45                 recW, (height / row));
46 
47         g.DrawImage(images[i], recDst, images[i].GetBounds(ref u), u);
48         //if (i == 4)
49         images[i].Save(i + "out.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
50     }
51 
52     //layouted.Save("layout.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
53     g.Dispose();
54 
55     return layouted;
56 }

 

调用:

 

1 Paper film = new Paper(3, 2);
2 film.addImg(Image.FromFile("1.jpg"));
3 film.addImg(Image.FromFile("2.jpg"));
4 film.addImg(Image.FromFile("3.jpg"));
5 film.addImg(Image.FromFile("4.jpg"));
6 film.addImg(Image.FromFile("5.jpg"));
7 film.addImg(Image.FromFile("6.jpg"));
8 
9 film.layout();

 


一直说想要讲下dicom协议的通讯 ,看来下次吧。
源码及测试文件下载猛击此处

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

富士胶片将利用银扩增技术开发高灵敏快速新冠病毒抗原检测试剂盒

富士胶片株式会社&#xff08;社长&#xff1a;助野健儿&#xff09;宣布开始开发用于诊断新型冠状病毒&#xff08;SARS-CoV-2*1&#xff09;感染的抗原检测试剂盒。富士胶片将使用其独有的银扩增免疫层析法*2&#xff0c;利用照片显影过程中使用的银扩增技术&#xff0c;开发…

2020年性价比之最相机的比较:索尼6400 与富士 xt30的比较及相关评价摘录

以下是截取的部分网友的评论&#xff1a; 【富士的胶片预设】索尼和富士拍出来的照片其实都是需要后期的,只不过富士机内胶片滤镜加上机内调出符合自己口味的预设拍出来的照片就很有味道,而索尼并没有这么好用的机内预设设置,但并不是说富士它的滤镜可以在任何情况下都能代替一…

ios 获取相机胶卷_电影胶片相机的工作原理

ios 获取相机胶卷 We’ve become reliant on digital cameras since they are so easy to use. But have you ever wondered how film-based photography works? Read on to increase your photographic knowledge—or to develop an new appreciation for your point and cli…

胶片打印、排版、自助打印(二)

一、DICOM打印的两种类型 灰度图像打印&#xff1a; 彩色图像打印&#xff1a; 通常情况下RGB类型DICOM图像包含如下的内容&#xff1a; (0028,0010)Rows 图像的高度 (0028,0011)Columns 图像的宽度 (0028,0030)Pixel Spacing 图像像素间距&#xff0c;读取Pixel Data的时候…

富士 XF30mm F2.8 微距镜头 评测

富士 XF30mmF2.8 R LM WR Macro 是一款标准定焦镜头&#xff0c;焦距为 30mm&#xff08;35mm 画幅 46mm 等效焦距&#xff09;。 据介绍&#xff0c;与传统标准镜头相比&#xff0c;该镜头的最近工作距离大幅缩短&#xff0c;特写性能显著提升&#xff0c;可实现 1:1 放大倍率…

富士胶片滤镜人像调色预设PS插件

首先这是一个PS插件安装与使用教程,PS插件请到陌鱼社区下载,支持PS软件版本:CC2015 01、软件图标右键“属性”-“打开文件位置”. 02、打开文件夹“Required”-“CEP”-“extensions”. 03、复制“com.adobe.My Fujifilm 2.0”文件夹到我们刚才打开的“extensions”文件夹内. 0…

如何使用富士施乐打印机FX DocuCentre S2011进行扫描文件

来源&#xff1a;如何使用富士施乐打印机FX DocuCentre S2011进行扫描文件 在安装了FX DocuCentre S2011打印机的情况下&#xff0c;如果需要使用扫描功能&#xff0c;需要安装扫描驱动程序。 1、打开富士胶片官网https://m3support-fb.fujifilm-fb.com.cn/&#xff0c;在【支…

API限速

最近遇到几个很有意思的接口&#xff0c;这些接口具有调用速率的限制&#xff0c;比如说一个接口具有每小时请求30次的限制&#xff0c;就是一小时只能请求这个接口30次&#xff0c;如果超过了30 次&#xff0c;那么接口服务方会启用惩罚策略&#xff0c;将调用的速率减小一些&…

5个免费抠图工具,PS直接下岗

无论是设计师&#xff0c;还是摄影师&#xff0c;都需要经常给图片处理背景&#xff0c;用PS效率低&#xff0c;还繁琐。今天给大家推荐5个一键抠图神器&#xff0c;让你节省更多的时间和成本。有需要的朋友赶紧收藏&#xff01; 1、Removebg https://www.remove.bg/zh 一个免…

超简单的_ps抠图_在线抠图工具_智能抠图_速抠图

超简单的_ps抠图_在线抠图工具_智能抠图_速抠图 在线ps抠图_速抠图_智能抠图_sukoutu.com 关键词 在线抠图、ps抠图、智能抠图、一键抠图、钢笔抠图、图片处理、证件照换背景、一寸照制作、图片压缩 背景 一些用户在选择抠图时&#xff0c;通常会选择ps软件或者美图秀秀等pc端…

永久免费的抠图软件分享

有个小伙伴最近来短视频平台看到一些博主视频的封面图做的很搞笑很有吸引力&#xff0c;大致就是自拍的照片&#xff0c;做出有趣的动作然后抠图到反差感很大的背景图中&#xff0c;于是就自己也想尝试一下做出此类的图片来投稿&#xff0c;但是又不知道该怎么处理抠图和更换背…

如何抠图图片?这个方法值得点赞收藏

如何抠图图片&#xff1f;相信喜欢摄影的小伙伴们在日常生活中经常需要对图片进行抠图处理&#xff0c;对专业的小伙伴们来说抠图早已经是家常便饭。但是作为非专业人士&#xff0c;我们在日常生活中偶尔需要抠图的话&#xff0c;可能会不知道从何下手。其实抠图也并非你想象中…

如何抠图?抠图方法分享。

如何抠图&#xff1f;抠图是一种图像处理技术&#xff0c;通常用于将图像中的某个部分从背景中分离出来。在制作表情包时&#xff0c;通常需要先抠出人物或物品&#xff0c;然后将其放置在另一张图像或背景上。抠图可以通过各种软件来完成&#xff0c;很多小伙伴也不知道该采用…

Stable Diffusion 抠图工具使用小记

用stable diffusion有段时间了&#xff0c;最近使用了它的抠图工具 &#xff08;Remove background&#xff09;。这里是我对该工具的使用和记录。希望可以帮其他人了解相关内容。文末附100个Lora资源方便大家使用。 在图像处理中&#xff0c;抠图是一项非常重要的任务。传统的…

别花时间抠图了,赶紧试试这几个免抠图的PNG图片网站!

https://zhuanlan.zhihu.com/p/35284104 我们知道&#xff0c;做一份好的PPT&#xff0c;绝少不了一张好的图片素材&#xff0c;之前我也给大家推荐过很多&#xff0c;像pexel、pixabay、500px等。如果没看&#xff0c;可以看一下这篇推文《6个图片网站&#xff0c;带你找到全世…

怎样快速抠图ps图片?这些小妙招了解一下

最近有个做生活vlog记录的小伙伴发出提问&#xff0c;想给自己的照片抠图人像&#xff0c;更换个场景再p一些文字和效果做视频的封面图&#xff0c;其实一个视频除了内容&#xff0c;标题和封面图也至关重要&#xff0c;好的封面可以吸引观众想点击进去的心理&#xff0c;反之视…

怎么使用手机来抠图?这几种抠图方法手机就能操作

怎么使用手机来进行抠图呢&#xff1f;使用手机抠图应用程序&#xff0c;我们无需将图片转移到电脑上进行编辑&#xff0c;只需在手机上点击几下&#xff0c;即可完成图片抠图。这种便捷的操作方式&#xff0c;能够大大提高我们的工作效率。可以随时随地进行抠图操作&#xff0…

如何简单抠图?在手机上就可以完成抠图

如何简单抠图&#xff1f;我们在作图的时候大都需要进行抠图操作&#xff0c;将一些好看的元素抠出来&#xff0c;放到海报或者一些图片当中&#xff0c;可以说抠图已经成为我们修图中的十分重要的部分。但是可能很多小伙伴们还不是很清楚如何更快抠图&#xff0c;这里小编就来…

PS常用的三种抠图方法,能应对99%的抠图场景

使用工具&#xff1a;PS CC2018 方法&#xff1a;通道抠图、蒙版抠图、选择并遮住 方法一&#xff1a;通道抠图&#xff08;主体颜色和背景色不能太接近&#xff09; 步骤1 &#xff1a;使用套索工具将主体部分选中&#xff0c;建立选取→ctrlj&#xff0c;将建立选取的部分复…

GIMP抠图

The GNU Image Manipulation Program&#xff08;简称GIMP&#xff09;&#xff0c;是免费的&#xff0c;分布式的图片润饰、图像制作和处理软件&#xff0c;用GTK编写的图像编辑处理程序&#xff0c;被称为Linux下的Photoshop&#xff0c;但是也有Windows版本的。 按颜色选择…