ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/doc/man/man1/rmtxop.1
Revision: 1.26
Committed: Wed Nov 29 18:56:28 2023 UTC (17 months, 2 weeks ago) by greg
Branch: MAIN
Changes since 1.25: +2 -1 lines
Log Message:
feat(rmtxop): Added 'A' symbolic component for average of all channels

File Contents

# User Rev Content
1 greg 1.26 .\" RCSid "$Id: rmtxop.1,v 1.25 2023/11/27 22:04:45 greg Exp $"
2 greg 1.23 .TH RMTXOP 1 5/31/2014 RADIANCE
3 greg 1.1 .SH NAME
4 greg 1.10 rmtxop - concatenate, add, multiply, divide, transpose, scale, and convert matrices
5 greg 1.1 .SH SYNOPSIS
6     .B rmtxop
7     [
8     .B \-v
9     ][
10 greg 1.3 .B \-f[afdc]
11 greg 1.1 ][
12     .B \-t
13     ][
14 greg 1.25 .B "\-c ce .."
15     ][
16 greg 1.1 .B "\-s sf .."
17     ][
18 greg 1.22 .B "\-rf|\-rb"
19 greg 1.1 ]
20     .B m1
21     [
22 greg 1.13 .B ".+*/"
23 greg 1.1 ]
24     .B ".."
25     .SH DESCRIPTION
26     .I Rmtxop
27 greg 1.10 loads and concatenates or adds/multiplies/divides
28     together component matrix files given on the command line.
29 greg 1.1 Each file must have a header containing the following variables:
30     .sp
31     .nf
32     NROWS={number of rows}
33     NCOLS={number of columns}
34     NCOMP={number of components}
35 greg 1.24 FORMAT={ascii|float|double|32-bit_rle_rgbe|32-bit_rle_xyze|Radiance_spectra}
36 greg 1.25 .fi
37 greg 1.1 .sp
38     The number of components indicates that each matrix element is actually
39     composed of multiple elements, most commonly an RGB triple.
40     This is essentially dividing the matrix into planes, where each component
41     participates in a separate calculation.
42     If an appropriate header is not present, it may be added with a call to
43     .I rcollate(1).
44     A matrix may be read from the standard input using a hyphen by itself ('-')
45     in the appropriate place on the command line.
46     .PP
47 greg 1.9 Any of the matrix inputs may be read from a command
48     instead of a file by
49     using quotes and a beginning exclamation point ('!').
50     .PP
51 greg 1.1 Two special cases are handled for component matrices that are either
52 greg 1.20 XML files containing BSDF data, or Radiance picture files.
53     In the first case, the BSDF library loads and interprets the
54     transmission matrix by default.
55     Alternatively, the front (normal-side) reflectance is selected if the
56     .I \-rf
57     option precedes the file name, or the backside reflectance if
58     .I \-rb
59     is specified.
60 greg 1.9 (XML files cannot be read from the standard input or from a command.)\0
61 greg 1.1 In the second case, the RGBE or XYZE values are loaded in a 3-component
62     matrix where the number of columns match the X-dimension of the picture, and
63     the number of rows match the Y-dimension.
64     The picture must be in standard pixel ordering, and the first row
65 greg 1.7 is at the top with the first column on the left.
66 greg 1.21 Any exposure changes that were applied to the pictures before
67 greg 1.18 .I rmtxop
68     will be undone, similar to the
69 greg 1.19 .I pcomb(1)
70 greg 1.18 .I \-o
71     option.
72 greg 1.24 Radiance spectral pictures with more than 3 components are also supported.
73     These are typically produced by
74     .I rtrace(1)
75     or
76     .I rfluxmtx(1).
77 greg 1.1 .PP
78     Before each file, the
79     .I \-t
80     and
81 greg 1.25 .I \-c
82     and/or
83 greg 1.1 .I \-s
84     options may be used to modify the matrix.
85     The
86     .I \-t
87     option transposes the matrix, swapping rows and columns.
88     The
89     .I \-c
90 greg 1.25 option can "transform" the element values, possibly changing
91 greg 1.1 the number of components in the matrix.
92     For example, a 3-component matrix can be transformed into a single-component
93     matrix by using
94     .I \-c
95     with three coefficients.
96     A four-component matrix can be turned into a two-component matrix using 8
97     coefficients, where the first four coefficients will be used to compute
98     the first new component, and the second four coefficients
99     yield the second new component.
100     Note that the number of coefficients must be an even multiple of the number
101     of original components.
102 greg 1.25 Alternatively, a set of symbolic output components can be specified as capital
103     letters, with the following definitions:
104     .sp
105     .nf
106     R - red channel
107     G - green channel
108     B - blue channel
109     X - CIE X channel
110     Y - CIE Y channel (aka., luminance or illuminance)
111     Z - CIE Z channel
112     S - scotopic luminance or illuminance
113     M - melanopic luminance or illuminance
114 greg 1.26 A - average component value
115 greg 1.25 .fi
116     .sp
117     These letters may be given in any order as a single string, and if
118     .I "-c RGB"
119     or
120     .I "-c XYZ"
121     is specified along with a
122     .I "-fc"
123     option, the output will be written as a RGBE or XYZE picture, respectively.
124     Note that conversion from a float or RGBE color space applies a conversion
125     of 179 lumens/watt (for CIE or melanopic output) or 412 (for scotopic output),
126     and the reverse happens for conversion from XYZE input to RGB or RGBE output.
127     .PP
128     Additionally, the
129 greg 1.1 .I \-s
130 greg 1.25 option applies the given scalar factor(s) to the elements of the matrix.
131     If only one factor is provided,
132     it will be used for all components.
133     If multiple factors are given, their number must match the number of matrix
134     components
135     .I after
136     application of any
137 greg 1.1 .I \-c
138 greg 1.25 option for this input matrix or picture.
139 greg 1.1 .PP
140     If present, the second and subsequent matrices on the command
141 greg 1.16 line are concatenated together, unless separated by a plus ('+'),
142 greg 1.10 asterisk ('*'), or forward slash ('/') symbol,
143 greg 1.15 in which case the individual matrix elements are added,
144 greg 1.16 multiplied, or divided, respectively.
145     The concatenation operator ('.') is the default and need not be specified.
146     Note also that the asterisk must be quoted or escaped in most shells.
147 greg 1.10 In the case of addition, the two matrices involved must have the same number
148     of components.
149 greg 1.15 If subtraction is desired, use addition ('+') with a scaling parameter of -1
150     for the second matrix (the
151     .I \-s
152     option).
153 greg 1.11 For element-wise multiplication and division, the second matrix is
154 greg 1.15 permitted to have a single component per element, which will be
155 greg 1.11 applied equally to all components of the first matrix.
156 greg 1.10 If element-wise division is specified, any zero elements in the second
157     matrix will result in a warning and the corresponding component(s) in the
158     first matrix will be set to zero.
159     .PP
160 greg 1.16 Evaluation proceeds from left to right, and all operations have
161     the same precedence.
162     If a different evaluation order is desired, pipe the result of one
163     .I rmtxop
164     command into another, as shown in one of the examples below.
165     .PP
166 greg 1.17 The number of components in the next matrix after applying any
167 greg 1.1 .I -c
168     transform must agree with the prior result.
169     For concatenation (matrix multiplication), the number of columns
170 greg 1.17 in the prior result must equal the number of rows in the next matrix, and
171 greg 1.1 the result will have the number of rows of the previous and the number
172 greg 1.17 of columns of the next matrix.
173 greg 1.10 In the case of addition, multiplication, and division,
174     the number of rows and columns of the prior result and the
175 greg 1.17 next matrix must match, and will not be changed by the operation.
176 greg 1.1 .PP
177 greg 1.25 A final transpose or transform/scaling operation may be applied to
178 greg 1.14 the results by appending the
179     .I \-t
180     and
181 greg 1.25 .I \-c
182     and/or
183 greg 1.14 .I \-s
184     options after the last matrix on the command line.
185     .PP
186 greg 1.1 Results are sent to the standard output.
187 greg 1.4 By default, the values will be written in the lowest resolution format
188 greg 1.6 among the inputs, but the
189 greg 1.1 .I \-f
190 greg 1.4 option may be used to explicitly output components
191 greg 1.25 as ASCII (-fa), binary doubles (-fd), floats (-ff), or common-exponent
192     colors/spectra (-fc).
193 greg 1.1 In the latter case, the actual matrix dimensions are written in the resolution
194     string rather than the header.
195 greg 1.24 Also, matrix results will be written as standard
196     Radiance pictures if they have either one
197 greg 1.1 or three components.
198     In the one-component case, the output is written as grayscale.
199 greg 1.24 If more than 3 components are in the final matrix and
200     .I -fc
201     is specified, the output will be a Radiance spectral picture.
202 greg 1.1 .PP
203     The
204     .I \-v
205     option turns on verbose reporting, which announces each operation.
206     .SH EXAMPLES
207     To concatenate two matrix files with a BTDF between them and write
208     the result as binary double:
209     .IP "" .2i
210     rmtxop -fd view.vmx blinds.xml exterior.dmx > dcoef.dmx
211     .PP
212     To convert a BTDF matrix into a Radiance picture:
213     .IP "" .2i
214     rmtxop -fc blinds.xml > blinds.hdr
215     .PP
216 greg 1.16 To extract the luminance values from a picture as an ASCII matrix:
217     .IP "" .2i
218     rmtxop -fa -c .265 .670 .065 image.hdr > image_lum.mtx
219     .PP
220 greg 1.25 To render a melanopic illuminance image with
221     .I rtrace\:
222     .IP "" .2i
223     vwrays -ff -x 1024 -y 1024 -vf myview.vf |
224     rtrace -fff -cs 18 -co+ -i+ `vwrays -x 1024 -y 1024 -vf myview.vf -d` scene.oct |
225     rmtxop -fc -c M - > scene_meli.hdr
226     .PP
227 greg 1.1 To scale a matrix by 4 and add it to the transpose of another matrix:
228     .IP "" .2i
229 greg 1.16 rmtxop -s 4 first.mtx + -t second.mtx > result.mtx
230     .PP
231     To multiply elements of two matrices, then concatenate with a third,
232     applying a final transpose to the result:
233     .IP "" .2i
234     rmtxop first.mtx \\* second.mtx . third.mtx -t > result.mtx
235 greg 1.1 .PP
236 greg 1.15 To left-multiply the element-wise division of two matrices:
237     .IP "" .2i
238     rmtxop -fd numerator.mtx / denominator.mtx | rmtxop left.mtx - > result.mtx
239     .PP
240 greg 1.1 To send the elements of a binary matrix to
241     .I rcalc(1)
242     for further processing:
243     .IP "" .2i
244 greg 1.5 rmtxop -fa orig.mtx | rcollate -ho -oc 1 | rcalc [operations]
245 greg 1.13 .SH NOTES
246 greg 1.16 Matrix concatenation is associative but not commutative, so order
247 greg 1.13 matters to the result.
248     .I Rmtxop
249 greg 1.16 takes advantage of this associative property to concatenate
250     from right to left when it reduces the number of basic operations.
251 greg 1.13 If the rightmost matrix is a column vector for example, it is
252 greg 1.16 much faster to concatenate from the right, and the result will
253 greg 1.13 be the same.
254 greg 1.16 Note that this only applies to concatenation;
255     element-wise addition, multiplication, and division are always
256 greg 1.13 evaluated from left to right.
257 greg 1.1 .SH AUTHOR
258     Greg Ward
259     .SH "SEE ALSO"
260 greg 1.25 cnt(1), getinfo(1), histo(1), neaten(1), pcomb(1),
261     ra_xyze(1), rcalc(1),
262 greg 1.23 rcollate(1), rcontrib(1), rcrop(1), rfluxmtx(1), rlam(1),
263 greg 1.25 rsplit(1), rtrace(1), tabfunc(1), total(1), vwrays(1),
264     wrapBSDF(1)