找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 2809|回复: 8

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

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

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)"
}
鉴于目前的计算机速度(之快),我建议用后一种方案。
发表于 2003-5-9 08:33:10 | 显示全部楼层

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

JB:
  我现在基本用的是第二种方法,但如果原本的按你的方法做,还有一个问题,就是不光要记录是否被操作,还要记录其操作的顺序。
  例如 镜像---》左旋90度,和 左旋90度---》镜像,的结果是不一样的。
  所以这样的话,也可以实现,但是要很繁。
  疑惑?
 楼主| 发表于 2003-5-9 08:57:02 | 显示全部楼层

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

是的呀,如果要用第二种办法,
就要记录并且跟踪全部的操作步骤,
有的一些还要考虑顺序。。。
确实很繁..
研究中.....
 楼主| 发表于 2003-5-9 08:58:36 | 显示全部楼层

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

谢谢JB。。。
发表于 2003-5-9 09:14:44 | 显示全部楼层

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

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

发表于 2003-5-9 11:54:41 | 显示全部楼层

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

哦,是吗?
原来有一个通用的方法。
我试试看。
发表于 2003-5-9 12:10:05 | 显示全部楼层

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

对8位以上的图象当然应该最先是调窗的吧
发表于 2004-10-19 17:41:28 | 显示全部楼层

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

gdfgdg :-|
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表