Putting pixel values on an image

I wrote this snippet to generate images for teaching. I wanted to show the effect of matrix convolution on images. To understand this, it helps to see the pixel values before and after convolution. 

// This procedure will take an image and make a new image with the pixel values overlaid.
// It offers the result to be saved as a PDF.
// It is intended for small grayscale images.

/// @param  m0  2D matrix (image) to be represented as pixel values
Function SavePixelValue(m0)
    Wave m0
    // check input wave
    if(DimSize(m0,2) > 1 || DimSize(m0,3) > 1)
        DoAlert 0, "Grayscale images only."
        return -1
    elseif(WaveType(m0) != 72)
        DoAlert 0, "8-bit images only."
        return -1
    endif
   
    Variable matsize = numpnts(m0)
    Duplicate/O m0, pixelValImg,pixelValWave
    String ValWinName = "vl_" + NameOfWave(m0)
    KillWindow/Z $ValWinName
    NewImage/N=$ValWinName/S=0 m0
    String m0Name = NameOfWave(m0)
   
    String textName,labelValStr
    Redimension/N=(matsize) pixelValWave
    Variable offset = x2pnt(m0, 0)
   
    Variable i

    for(i = 0; i < matsize; i += 1)
        textName = "text" + num2str(i)
        labelValStr = num2str(pixelValWave[i])
        //Tag/C/N=$textName/F=0/B=1/X=0.00/Y=0.00/L=0/W=$ImgWinName PixelValImg, i-offset, labelValStr
        if(pixelValWave[i] > (wavemin(m0) + round(0.5 * (wavemax(m0) - wavemin(m0)))))
            Tag/C/N=$textName/F=0/B=1/X=0.00/Y=0.00/L=0/W=$ValWinName $m0Name, i-offset, labelValStr
        else
            Tag/C/N=$textName/F=0/B=1/X=0.00/Y=0.00/L=0/W=$ValWinName/G=(65535,65535,65535) $m0Name, i-offset, labelValStr
        endif
    endfor
    String fileName = NameOfWave(m0) + ".pdf"
    SavePICT/E=-2 as fileName
End

 

Original image and the pixel value version

Forum

Support

Gallery

Igor Pro 8

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More