图像处理问题:请问哪位老师能贴个黑白图象转换成伪彩的代码?本人是医生,只会写点简单的VB程序,看到我们医院的超声设备能把黑白的图象加上伪彩处理,对医生有一定的辅助作用,哪位老师能帮得上忙的吗?谢谢!

解决方案 »

  1.   

    下面的代码,供参考。基本思路是,取得黑白图像的灰度值(例子中用彩色图像代替,但先将其转成黑白图像),然后再在颜色表中查找得到颜色。
    需要优化的地方:1)可用API函数代替point,pset,速度会更快。2)颜色表可适当选取。
    Option Explicit
    Private mCol() As LongPrivate Sub Command1_Click()
        Dim w As Long, h As Long
        w = Picture1.ScaleWidth
        h = Picture1.ScaleHeight
        Dim x As Long, y As Long, RealCol As Long
        Dim r As Long, g As Long, b As Long, grayCol As Long
        Dim nCol As Long
        For x = 0 To w
            For y = 0 To h
                RealCol = Picture1.Point(x, y)
                r = RealCol Mod 256
                g = (RealCol Mod 65536) \ 256
                b = RealCol \ 65536
                grayCol = (9798 * r + 19235 * g + 3735 * b) / 32768
                If grayCol < 32 Then
                    nCol = mCol(0)
                ElseIf grayCol < 64 Then
                    nCol = mCol(1)
                ElseIf grayCol < 96 Then
                    nCol = mCol(2)
                ElseIf grayCol < 128 Then
                    nCol = mCol(3)
                ElseIf grayCol < 160 Then
                    nCol = mCol(4)
                ElseIf grayCol < 192 Then
                    nCol = mCol(5)
                ElseIf grayCol < 224 Then
                    nCol = mCol(6)
                Else
                    nCol = mCol(7)
                End If
                Picture1.PSet (x, y), nCol
                DoEvents
            Next y
        Next x
        
    End SubPrivate Sub Form_Load()
        ReDim mCol(7)
        mCol(0) = ColorConstants.vbBlack
        mCol(1) = ColorConstants.vbGreen
        mCol(2) = ColorConstants.vbRed
        mCol(3) = ColorConstants.vbBlue
        mCol(4) = ColorConstants.vbCyan
        mCol(5) = ColorConstants.vbMagenta
        mCol(6) = ColorConstants.vbYellow
        mCol(7) = ColorConstants.vbWhite
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Erase mCol
    End Sub
      

  2.   

    ding一下,医生都能写程序了!
      

  3.   

    to  yuanyc(yyc) :
    我个人认为专业性的软件其实应该由具有相关专业知识的人来写,即使是计算机的博士也未必能搞得定一个比较专业化的算法,至少他先要去学习相关专业知识。
      

  4.   

    我可以提供一个简单的图像转换的例子,说是简单但是包含了大量图像处理的API,处理速度比较快只不处理的内容和变换简单而已,如果有兴趣的话你只需要改变代码中转换数组的生成函数就能达到给图像添加伪彩色的目的。如果需要留下mail地址并给我发短消息。提供我对另外一个医学影像有关的帖子的解答:http://blog.csdn.net/chewinggum/archive/2005/08/17/456506.aspx
      

  5.   

    楼主发了两次,前面的贴,我已经说明了算法,估计楼主没有看到吧,重新贴一下:
    大体的算法如下:
    灰度256级的黑白照,将整个灰度空间4等分,每64级一段红色的灰度对应方程R(Gray)为: 
                      Red = 0            (0 <= Gray <= 127)
             Red = Gray * 4     (128 <= Gray <= 191)
                      Red = 255          (192 <= Gray <= 255) 绿色的灰度对应方程G(Gray)为: 
                      Green = Gray * 4         (0 <= Gray <= 63)
                      Green = 255              (64 <= Gray <= 191) 
                      Green = 1020 - 4 * Gray  (192 <= Gray <= 255)蓝色的灰度对应方程B(Gray)为: 
                      Blue = 255            (0 <= Gray <= 63)
                      Blue= 510 - 4 * Gray  (64 <= Gray <= 127)
                      Blue=0                (128 <= Gray <= 255)另外补充一句,楼上的程序中:
    temp = OldMapArr(j, i).r * 0.3 + OldMapArr(j, i).G * 0.59 + OldMapArr(j, i).b * 0.11
    这记忆一句是不必要的,楼主本来就是一个灰度图,不必再花这么多浮点运算转换成灰度了。
    因此只要在原图上任意点的像素值中的任取一点,该点的R,G,B三个值是相同的,并且该点的灰度值也等于这个值,因此即使使用了上面的这个语句来转换,你也会发现Gray=Green=Red=Blue
    再说一下程序的思路:
    先用两次循环获得整个图片的每一点像素值。
    从图取得的点的颜色值是一个长整数,要把里面的R,G,B分离出来,算法入下:
    Red = Color mod 256
    Color = Color \ 256
    Green = Color mod 256
    Blue = Color \ 256
    由于本来就是一个灰度图,即使转换成R,G,B值,三者也是相等的,(前文已经说过,因此任取一个就行)
    改为:
    Gray(x,y) = Color(x,y) \ 256然后,代上面给出的公示
    计算每一点的新颜色:
    Dot(x,y) = RGB(R(Gray(x,y)),G(Gray(x,y)) ,B(G(x,y)))
    然后把新的线素画到原来的位置(x,y)就可以了。
      

  6.   

    “ding一下,医生都能写程序了!”——嘿嘿……其实大家可能不知道,深圳唯一的一位医学影像博士最喜欢干的事就是写程序,他自己写的医学影像程序在他们医院用得很好——当然,大家别瞎猜,这个传说中的博士不是我——不过呢我可以告诉大家喔,我写的程序能卖钱,嘿嘿……权当是鼓励一下广大的程序员朋友:我不是程序员,但我的程序能卖钱!
    “楼主告诉病人说自己是个程序员,不知道病人会不会昏厥 哈哈”——一般我这么说的话,包括同事在内,都觉得我不是凡人,概括一下三字:“了不起”,——其实对写程序来说,我是门外汉,只能当做是一项业余兴趣。对不起,不知道怎么引用大家的回复:D不知道有没有朋友愿意合作开发DICOM相关的软件,有几家医疗器械公司的朋友叫我开发这么个东西,跟他们销售的影像设备打包的方式销售,要求很简单,以DICOM图像处理和图像存储为主,同时具备简单的图文报告功能——简单点说是开发一个PACS客户端,有兴趣的朋友可以发邮件到[email protected]
      

  7.   

    我门公司就是做B超的 我们老板现在就要我做一个能把WINDOWS的图片转换到B超上显示的程序 可我是新手 对这个不熟 望各位大哥帮忙啊
      

  8.   

    TO:chen2839846(云在海心) 
    其实你的问题比较简单:
    如果B超具备DICOM存储服务,你的程序也具备DICOM方面的能力,直接往B超通过网络发送图片;
    如果不具备DICOM接口,则B超要具有VIDEO IN视频接口——中高端的B超都具备VIDEO IN 接口的,一些便携式的可能没有,现在市场上很多的显示卡/电视卡/视频采集卡都具备TV-OUT功能,只要你的程序能往TV-OUT接口发送视频信号,那么接条视频线,B超上自然能看到你的电脑的东西啦。PS:但我不知道这个功能有什么实际意义?我感觉只相当于把B超上的显示器当作电脑的显示器——难道用设备来看VCD哈?