Compare Overlaid 2D Images
s.r.chinn
test(5,101); setup()
from the command line to show an example. I believe the Graph will update automatically to changes in the image waves as long as a wave1
duplicate, wsave
, is made at the same time, as in the Test(f,Npts)
example function. To be safe, run the setup()
function after image-wave changes.#pragma rtGlobals=3 // Use modern global access method and strict wave access.
Function Test(f, Npts) // make two test images for comparison
variable f , Npts // spatial frequency for test images; number of points
make/O/N=(Npts, Npts) wave0
setscale/I x, -0.5, 0.5, "" wave0
setscale/I y, -0.5, 0.5, "" wave0
wave0 = (cos(x*2*pi*f)*cos(y*2*pi*f))^2
duplicate/O wave0, wave1
MatrixOp /O /S wave1 = 0.75*RotateCols(wave1, 3) // alter wave1 from wave0
duplicate/O wave1, wsave // save a copy
end
Function setup() // Graph the bottom (wave0) and top (wave1) images; add slider and its hook sizing function
WAVE wave0, wave1, wsave
variable/G Nmax = DimSize(wave0, 0) - 1 // x-dimension points for Slider max value
variable Vmax0 = waveMax(wave0)
variable Vmin0 = waveMin( wave0)
variable Vmax1 = waveMax(wave1)
variable Vmin1 = waveMin( wave1)
variable Vmax = max(Vmax0, Vmax1) // for common color scale ranges
variable Vmin = min(Vmin0, Vmin1)
variable/G pG // global pixel value for slider
DoWindow/F Graph0 // Bring graph to front
if (V_Flag == 0) // if not found, make new Graph0 for overlaid images with slider for transparent boundary
PauseUpdate; Silent 1.
Display/N=Graph0 /W=(413.25,44.75,769.5,427.25)
AppendImage/T wave0
AppendImage/T wave1
ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14,height={Plan,1,left,top}
ModifyGraph mirror=2, nticks=3, minor=1,fSize=8, standoff=0, tkLblRot(left)=90, btLen=3, tlOffset=-2
SetAxis/A/R left
ControlBar/B 35
Slider slider0,pos={11,482},size={455,16},proc=SliderProc
Slider slider0,limits={0,Nmax,1},variable= pG,side= 2,vert= 0,ticks= 0
SetWindow kwTopWin,hook(MyHook)=MyWindowHook
DoUpdate
endif
GetWindow Graph0, psizeDC // gets V_left, V_right, V_top, V_bottom
ModifyImage wave0 ctab= {Vmin,Vmax,Terrain,0}
ModifyImage wave1 ctab= {Vmin,Vmax,Terrain,0} // common limits
Slider slider0 limits = { 0, Nmax, 1}
Slider slider0 pos = { 11, V_bottom+25}
Slider slider0 size = { V_right-V_left+16, 20 }
End
Function compare(n)
variable n
WAVE wave0, wave1, wsave
wave1 = wsave // reload full original
if (n==0)
return 0
endif
wave1[0,n][] = NaN // make left side of top image transparent
End
Function SliderProc(ctrlName,sliderValue,event) : SliderControl
String ctrlName
Variable sliderValue
Variable event // bit field: bit 0: value set, 1: mouse down, 2: mouse up, 3: mouse moved
if(event %& 0x1) // bit 0, value set
compare(sliderValue)
endif
return 0
End
Function MyWindowHook(s) // if window resized, adjust slider to match
STRUCT WMWinHookStruct &s
Variable hookResult = 0
wave wave0
switch(s.eventCode)
case 6: // graph resize
GetWindow Graph0, psizeDC
Slider slider0 pos = { 11, V_bottom+25}
Slider slider0 size = { V_right-V_Left+16, 20 }
break
case 8: // graph (wave size) modified
Slider slider0 limits = { 0,(DimSize(wave0, 0) - 1), 1}
break
endswitch
return hookResult // 0 if nothing done, else 1
End
Function Test(f, Npts) // make two test images for comparison
variable f , Npts // spatial frequency for test images; number of points
make/O/N=(Npts, Npts) wave0
setscale/I x, -0.5, 0.5, "" wave0
setscale/I y, -0.5, 0.5, "" wave0
wave0 = (cos(x*2*pi*f)*cos(y*2*pi*f))^2
duplicate/O wave0, wave1
MatrixOp /O /S wave1 = 0.75*RotateCols(wave1, 3) // alter wave1 from wave0
duplicate/O wave1, wsave // save a copy
end
Function setup() // Graph the bottom (wave0) and top (wave1) images; add slider and its hook sizing function
WAVE wave0, wave1, wsave
variable/G Nmax = DimSize(wave0, 0) - 1 // x-dimension points for Slider max value
variable Vmax0 = waveMax(wave0)
variable Vmin0 = waveMin( wave0)
variable Vmax1 = waveMax(wave1)
variable Vmin1 = waveMin( wave1)
variable Vmax = max(Vmax0, Vmax1) // for common color scale ranges
variable Vmin = min(Vmin0, Vmin1)
variable/G pG // global pixel value for slider
DoWindow/F Graph0 // Bring graph to front
if (V_Flag == 0) // if not found, make new Graph0 for overlaid images with slider for transparent boundary
PauseUpdate; Silent 1.
Display/N=Graph0 /W=(413.25,44.75,769.5,427.25)
AppendImage/T wave0
AppendImage/T wave1
ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14,height={Plan,1,left,top}
ModifyGraph mirror=2, nticks=3, minor=1,fSize=8, standoff=0, tkLblRot(left)=90, btLen=3, tlOffset=-2
SetAxis/A/R left
ControlBar/B 35
Slider slider0,pos={11,482},size={455,16},proc=SliderProc
Slider slider0,limits={0,Nmax,1},variable= pG,side= 2,vert= 0,ticks= 0
SetWindow kwTopWin,hook(MyHook)=MyWindowHook
DoUpdate
endif
GetWindow Graph0, psizeDC // gets V_left, V_right, V_top, V_bottom
ModifyImage wave0 ctab= {Vmin,Vmax,Terrain,0}
ModifyImage wave1 ctab= {Vmin,Vmax,Terrain,0} // common limits
Slider slider0 limits = { 0, Nmax, 1}
Slider slider0 pos = { 11, V_bottom+25}
Slider slider0 size = { V_right-V_left+16, 20 }
End
Function compare(n)
variable n
WAVE wave0, wave1, wsave
wave1 = wsave // reload full original
if (n==0)
return 0
endif
wave1[0,n][] = NaN // make left side of top image transparent
End
Function SliderProc(ctrlName,sliderValue,event) : SliderControl
String ctrlName
Variable sliderValue
Variable event // bit field: bit 0: value set, 1: mouse down, 2: mouse up, 3: mouse moved
if(event %& 0x1) // bit 0, value set
compare(sliderValue)
endif
return 0
End
Function MyWindowHook(s) // if window resized, adjust slider to match
STRUCT WMWinHookStruct &s
Variable hookResult = 0
wave wave0
switch(s.eventCode)
case 6: // graph resize
GetWindow Graph0, psizeDC
Slider slider0 pos = { 11, V_bottom+25}
Slider slider0 size = { V_right-V_Left+16, 20 }
break
case 8: // graph (wave size) modified
Slider slider0 limits = { 0,(DimSize(wave0, 0) - 1), 1}
break
endswitch
return hookResult // 0 if nothing done, else 1
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More