-
Notifications
You must be signed in to change notification settings - Fork 38
/
cgimageinfodescribevalues.pro
113 lines (101 loc) · 5.33 KB
/
cgimageinfodescribevalues.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
;========================================================================
; :Author: Matt Savoie <[email protected]>
;
; Created 05/18/2011
;
;******************************************************************************************;
; Copyright (c) 2011, by Fanning Software Consulting, Inc. ;
; All rights reserved. ;
; ;
; Redistribution and use in source and binary forms, with or without ;
; modification, are permitted provided that the following conditions are met: ;
; ;
; * Redistributions of source code must retain the above copyright ;
; notice, this list of conditions and the following disclaimer. ;
; * Redistributions in binary form must reproduce the above copyright ;
; notice, this list of conditions and the following disclaimer in the ;
; documentation and/or other materials provided with the distribution. ;
; * Neither the name of Fanning Software Consulting, Inc. nor the names of its ;
; contributors may be used to endorse or promote products derived from this ;
; software without specific prior written permission. ;
; ;
; THIS SOFTWARE IS PROVIDED BY FANNING SOFTWARE CONSULTING, INC. ''AS IS'' AND ANY ;
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ;
; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT ;
; SHALL FANNING SOFTWARE CONSULTING, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, ;
; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;
; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ;
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;
;******************************************************************************************;
;========================================================================*/
;
; Display information about an image at a given location
;
; :Params:
; image: in, required, type=image
; A 2D or 3D image array
; id: in, required, type=string
; Prefix to display when showing information about the image.
; xpixel: in, required, type=int
; The X location on the image to fetch information from
; ypixel: in, required, type=int
; The y location on the image to fetch information from
;
;
pro cgDescribeThisImgValues, image, id, xpixel, ypixel
COMPILE_OPT idl2, logical_predicate
dims = Size( image, /Dimensions )
trueIndex = Where( dims EQ 3 )
;; I guess a legit dimension could be three, too, but I
;; don't know what to do in that case.
IF N_Elements( trueIndex ) GT 1 THEN $
Message, 'Dude. This is one strange image! Returning.'
IF trueIndex[ 0 ] EQ -1 THEN BEGIN
value = image[ xpixel, ypixel ]
IF Size( value, /TNAME ) EQ 'BYTE' THEN value = Fix( value )
Print, id +' (' + StrTrim( xpixel, 2 ) + ',' + StrTrim( ypixel, 2 ) + ') is ', StrTrim( value, 2 )
ENDIF ELSE BEGIN
;; 3D image processing here.
CASE trueindex[ 0 ] OF
0: rgb = image[ *, xpixel, ypixel ]
1: rgb = image[ xpixel, *, ypixel ]
2: rgb = image[ xpixel, ypixel, * ]
ENDCASE
IF Size( rgb, /TNAME ) EQ 'BYTE' THEN rgb = Fix( rgb )
value = '[' + StrTrim( rgb[ 0 ], 2 ) + ', ' + StrTrim( rgb[ 1 ], 2 ) + ', ' + StrTrim( rgb[ 2 ], 2 ) + ']'
Print, id + ' (' + StrTrim( xpixel, 2 ) + ',' + StrTrim( ypixel, 2 ) + ') is ' + value
ENDELSE
end
;+
; Provide information about the selected xy-pixel from an image, or a hash of
; images.
;
; :Params:
; iimage: in, required, type=image
; A 2D or 3D image array
; xpixel: in, required, type=int
; The X location on the image to fetch information from
; ypixel: in, required, type=int
; The y location on the image to fetch information from
; hsh: in, optional, type=HASH
; If a valid HASH, it should contain key/Image (string/array) pairs that
; will be described.
;
;-
pro cgImageInfoDescribeValues, iimage, xpixel, ypixel, hsh
compile_opt idl2, logical_predicate
;; If you've got a hash of images, display the information for those.
IF obj_valid( hsh ) && obj_isa( hsh, 'HASH' ) THEN BEGIN
keys = hsh -> keys( )
FOR k = 0, n_elements( keys ) - 1 DO BEGIN
image = hsh[ keys[ k ] ]
cgDescribeThisImgValues, image, keys[ k ], xpixel, ypixel
ENDFOR
ENDIF ELSE BEGIN
;; This was just a plain image input so use it.
cgDescribeThisImgValues, iimage, 'Value at ', xpixel, ypixel
ENDELSE
END