发新话题
打印

JB在吗?想请教你一个问题。。。

JB在吗?想请教你一个问题。。。

我自己搞了一个简单的dicom viewer,
打开dicom图像时参考的是ezDicom
调窗是这样来实现的:
打开一个dicom文件后,把每点的密度值存在一个全局数组里。。
调窗的时候根据窗宽,窗位,的变化,去更新这个数组里每点的密度值,
然后重新生成bitmap。
但我有个问题。
如果我做了一些图像处理(如反白,平滑,翻转,放大),
这以后再调窗的话,要在处理完的这个基础上进行调窗呀,
可是这个时候,全局数组里的每点的值没有变化呀(我也不知道该如何变化)
所以这时,再调窗,又回到没有进行图像处理以前的效果了。。
不知道大家是用什么方法实现的?
能交流一下吗????
如能指点一二。。
不胜感谢。。。。

TOP

JB在吗?想请教你一个问题。。。


提供两种参考实现办法,
做法一: 按照你目前的设计,第一次在 16-bit 原图里做 window-level,以后所有作业都在 BMP/DIB 里做。调窗时只改 BMP 里的 palette 而不变密度值和图形。示意码:
void CMyViewer:rawImage(CMyBmp &oneImage, CDC *pDC)
{
  // Please set m_nPalWindow to 255 and m_nPalCenter to 128
  // when the new BMP is generated from the original DICOM image
  // with 16-bit (default) window-leveling
  if ((m_nPalWindow != 255) && ((m_nPalCenter != 128))
     oneImage.WindowLevelBMPPalette(m_nPalWindow, m_nPalCenter)"
  oneImage.Draw(pDC)"
}
做法二: 每次调窗时产生新的 BMP。 改写你的 draw function。反白、平滑、翻转、放大、平移等等全部用参数记下来,有些要累积起来。每次图刷新的时候都要重新处理。示意码:
void CMyViewer:rawImage(CMyBmp &oneImage, CDC *pDC)
{
...
  CMyBmp ImageObj = oneImage" // Make a copy of the BMP image
  if (m_bInvert)
    ImageObj.Invert()" // 反白
  if (m_eFlip != FLIP_NONE) // 翻转
    ImageObj.Flip(m_eFlip)
  if ((m_nRotate != 0) && (m_nRotate != 360)) // 旋转
    ImageObj.Rotate(m_nRotate)

if (m_eSmoothAlgorithm != SMOOTH_NONE)
    ImageObj.Smooth(m_eSmoothAlgorithm )" // 平滑
  if (m_dZoom != 1.0)
    ImageObj.Zoom(m_dZoom)" // 放大
   ImageObj.Draw(pDC)"
}
鉴于目前的计算机速度(之快),我建议用后一种方案。

TOP

JB在吗?想请教你一个问题。。。

JB:
  我现在基本用的是第二种方法,但如果原本的按你的方法做,还有一个问题,就是不光要记录是否被操作,还要记录其操作的顺序。
  例如 镜像---》左旋90度,和 左旋90度---》镜像,的结果是不一样的。
  所以这样的话,也可以实现,但是要很繁。
  疑惑?
12345678,22345678,32345678......

TOP

JB在吗?想请教你一个问题。。。

是的呀,如果要用第二种办法,
就要记录并且跟踪全部的操作步骤,
有的一些还要考虑顺序。。。
确实很繁..
研究中.....

TOP

JB在吗?想请教你一个问题。。。

谢谢JB。。。

TOP

JB在吗?想请教你一个问题。。。

Asyounger,
这些操作的顺序是有讲究的,但不需要记 (不需要一串 if). 试试下列顺序,
1. Pan
2. Rotate
3. Zoom
4. Flip
5. Overlay operations (in image coordinate)

TOP

JB在吗?想请教你一个问题。。。

哦,是吗?
原来有一个通用的方法。
我试试看。
12345678,22345678,32345678......

TOP

JB在吗?想请教你一个问题。。。

对8位以上的图象当然应该最先是调窗的吧
一只加肥猫,有啥可怕? --- mouse forever
___________________________________
Name(姓名): mouse
Field(行业) : PACS & RIS & DICOM
QQ (OICQ) : 2670136
Page (主页): http://www.pacser.net

-------------------------------------------------------------

TOP

JB在吗?想请教你一个问题。。。

gdfgdg :-|

TOP

发新话题