Image Processing https://www.wavemetrics.com/ en Image Explorer for ScanImage https://www.wavemetrics.com/node/22059 Image Explorer for ScanImage<span><a title="View user profile." href="/user/ben-murphy-baum" lang="" about="/user/ben-murphy-baum" typeof="schema:Person" property="schema:name" datatype="">Ben Murphy-Baum</a></span> <span>Tue, 02/28/2023 - 05:24 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> <span class="entity-reference"><a href="/taxonomy/term/48" hreflang="en">Visualization/Gizmo</a></span> </span> <span class="body"><h2>Visualization of time-varying fluorescence</h2> <p>Image Explorer is a data visualization tool for 3D image stacks. It includes tools for navigating and selecting images, signal playback, image contrast controls, max projection, and for visualizing time-varying fluorescence data by mousing over different areas of an image stack.</p> <p><img alt="" data-entity-type="file" data-entity-uuid="29f15565-7cab-4e73-84cb-776128cf7440" height="632" src="/sites/www.wavemetrics.com/files/users/user15290/ImageExplorer_Example3.png" width="1000" /></p> <h2>ScanImage tiffs</h2> <p>Image Explorer includes a loader designed specifically for loading complex .tif formats produced by ScanImage microscopy software. Although only ScanImage files can be loaded, the visualization tools will work on any 3D wave, as long as it is in the expected folder structure within Igor. See the header in the .ipf file for instructions on use, etc. </p> <p>There are likely some imaging configurations that will fail to load properly, however the following configurations of time-varying frame scans are currently supported:</p> <ul><li>Multiple channels</li> <li>Multiple scan fields</li> <li>Multiple z positions (e.g. using fast-z functionality from an electrically tunable lens (ETL) or a lens with a piezo-electric actuator</li> <li>Z stacks with multiple frames per z position </li> </ul><p>ScanImage interleaves channels, scan fields, and z positions in its .tif specification, so Image Explorer's primary job is to separate that data into multiple output waves for the user. </p> <h2>ROI Creation</h2> <p>Image Explorer is capable of defining regions of interest for further analysis. Currently those ROI boundaries are saved in root:Packages:NeuroToolsPlus:ScanImage:ROIs for the user to then do what they want with them. Future updates will probably allow automatic fluorescence extraction of ROIs. This is already a feature of the NeuroTools analysis package (with ScanImage add-on package installed), so that is currently the better option for subsequent analysis using ROIs. </p> <p><img alt="" data-entity-type="file" data-entity-uuid="8a62f25f-3dce-4d3d-8e24-e342d95d0500" height="492" src="/sites/www.wavemetrics.com/files/users/user15290/ImageExplorer_ROIs.png" width="600" /></p> <h3>Using Image Explorer</h3> <p>ImageExplorer.ipf goes in User Procedures or Igor Procedures.</p> <p>Open Image Explorer through the 'Analysis' menu in Igor.</p> <p>Important note:  Image Explorer requires the JSON xop provided by byte-physics (<a href="https://www.wavemetrics.com/node/20976">https://www.wavemetrics.com/node/20976</a>), so this must also be installed</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> <article data-comment-user-id="748" id="comment-23794" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/748"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">thomas_braun</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1677672563"></mark> <span class="comment-body"><p>Nice to our JSON XOP being used!</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=23794&amp;1=default&amp;2=en&amp;3=" token="_cV89cnjgzTsCkcxirlnAC_A_1U5bwqHtCjN75AsK40"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 1, 2023 at 04:09 am - <a href="/comment/23794#comment-23794" hreflang="en">Permalink</a></p> </article> </section> Wed, 01 Mar 2023 01:24:00 +0000 Ben Murphy-Baum 22059 at https://www.wavemetrics.com OpticalFlow https://www.wavemetrics.com/node/21936 OpticalFlow <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/morten" lang="" about="/user/morten" typeof="schema:Person" property="schema:name" datatype="">morten</a></span> <span>Sat, 07/23/2022 - 02:08 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> </span> <span class="body"><p>This XOP wraps <a href="https://opencv.org">openCV</a> to provide dense optical flow calculations in Igor Pro.</p> <p>Two algorithms have been wrapped: Farneback optical flow (<em>OpticalFlowFarneback</em>) and Dense Inverse Search (DIS) optical flow (<em>OpticalFlowDIS</em>). For details, please see the attached help file (Optical Flow.ihf) and the openCV documentation.</p> <p><strong>Installation</strong></p> <p>On macOS, simply copy the <em>OpticalFlow-64.xop</em> to the <em>Igor Extensions (64-bit) </em>folder<em>. </em></p> <p>On Windows, also copy <em>OpticalFlow-64.xop</em> to the <em>Igor Extensions (64-bit) </em>folder<em>.</em> In addition, you need to obtain the <em>opencv_world460.dll</em> file from the openCV 4.6 release, which can be downloaded from the openCV <a href="https://opencv.org">website</a>. Place this file next to <em>OpticalFlow-64.xop</em> in the <em>Igor Extensions (64-bit)</em> folder.</p> <p><strong>Usage</strong></p> <p>The OpticalFlow.pxp sample experiment and OpticalFlow.ipf procedure file provide an example how to visualize optical flow fields in Igor Pro. </p> <p><img alt="" data-entity-type="file" data-entity-uuid="440a1270-d785-4f35-87f2-80c771dc4cef" height="300" src="/sites/www.wavemetrics.com/files/users/user13450/images.gif" width="300" /></p> <p> </p> <p><img alt="" data-entity-type="file" data-entity-uuid="12aa8c31-1395-40f2-9a33-c5f1f48e1fe7" height="447" src="/sites/www.wavemetrics.com/files/users/user13450/flow.jpg" width="447" /></p> <p><strong>Limitations</strong></p> <p>The XOP only work with unsigned 8-bit  images. Please convert your images beforehand, adjusting contrast etc. as required.</p> <p> </p> <p><strong>General Remarks</strong></p> <p>The XOP was built using XOP Toolkit 8.0 in Xcode 13.4.1 and Visual Studio 2019. <a href="https://github.com/shinjukunian/OpticalFlowXOP">Please see the project on Github for details.</a> </p> <p> </p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> </span> <a href="https://github.com/shinjukunian/OpticalFlowXOP" target="_blank">View Homepage</a> MIT <a href="https://github.com/shinjukunian/OpticalFlowXOP" target="_blank">https://github.com/shinjukunian/OpticalFlowXOP</a> <section class="comment-section"> </section> Sat, 23 Jul 2022 09:08:04 +0000 morten 21936 at https://www.wavemetrics.com Spectra Image Profile - Create profiles from, normalize and edit 2D / 3D spectral data https://www.wavemetrics.com/node/21549 Spectra Image Profile - Create profiles from, normalize and edit 2D / 3D spectral data <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/chozo" lang="" about="/user/chozo" typeof="schema:Person" property="schema:name" datatype="">chozo</a></span> <span>Mon, 02/15/2021 - 07:44 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><p>This project provides tools for working on 2D spectral data or layers of 3D data, and was inspired by the WaveMetrics Image Line Profile procedure (now replaced by the internal Line Profile tool). The basic functionality is similar to the official tool at first glance, but this project has many convenient features tailored for spectroscopic data such as detector images, two-dimensional scans or intensity maps. The main functionality is the horizontal or vertical data integration between two region-of-interest (ROI) lines to create a profile, which can be saved, compared or even used to modify the data itself. Other functions (such as normalization) are applied directly to the 2D data or layer. <strong>The tool works directly on the input data, but a backup is saved upon start.</strong> Several tools to work on 1D-3D data are included as well.</p> <p>I tried my best to test everything thoroughly, but users should verify the correct behavior for critical applications. Bug reports and suggestions for new features are always welcome.<em> Special thanks to Oleg Dyachok from Uppsala University for suggesting and testing improvements for version 4.0 and beyond.</em></p> <h2>User Interface controls</h2> <p>To start, select a 2D or 3D wave in the Data Browser and then go to <strong>‘Spectra Tools’ -&gt; ‘Image Profile …’</strong> in the top menu. Or use the command line:</p> <span class="geshifilter"><code class="igor geshifilter-igor">SpectraProfile<span style="color: #000000;">&#40;</span>inputWave<span style="color: #000000;">&#41;</span></code></span> <p>A quick overview of all controls can be found below:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="d5357714-0933-4671-b241-d37a179a3be6" height="543" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_manual_ver4.05.png" width="829" /></p> <h3>Line profile controls</h3> <ul><li>The profile can be calculated in <strong>horizontal (h key) or vertical (v key) direction</strong>. Diagonal or free-form modes (like in the Line Profile tool) are not available.</li> <li>The Region-of-Interest (ROI) lines can be modified via the control variables, by dragging the lines directly with the mouse on the image or by using the cursor keys on the keyboard (holding the <strong>shift key</strong> speeds up movements by 4x and the <strong>ctrl / command key</strong> slows down movement by 1/2). Holding <strong>both the ctrl / command and shift keys</strong> slows the movement down to one delta unit (one row / column) for precise placement.</li> <li>To instantly go to the <strong>full (minimal) ROI </strong>width use the respective check boxes or use the <strong>page up / page down keys</strong>.</li> <li><strong>Normalize Profile:</strong> The profile (not the image) will be normalized to fall between 0 and 1.</li> <li><strong>Mouse Csr Profile:</strong> An additional profile appears for comparison, which shows the current row or column under the mouse cursor<strong> </strong>(toggle with the m key). This profile is not saved.</li> <li><strong>Snap Lines to Grid:</strong> The ROI line positions are constrained to include only full rows / columns.</li> </ul><h3>The Save Profile and Snapshot buttons</h3> <p>The Save profile button saves the current profile next to the input data using a name ending which depends on the selected range. The ending is of the format “_H(xxx-xxx)” (horizontal mode) or “_V(xxx-xxx)” (vertical mode), where xxx give the start and end of the current range, e.g., “mydata_H(16.7-19.3)”. If the full image is selected the ending will be just “_prH” or “_prV”, respectively. Holding the shift key while pressing the button will lock the ending to “_prH” / “_prV” regardless of the selected range. The range and width is always saved inside the output wave’s note.</p> <p>The Snapshot button will instead create and display a backup of the current profile for comparison. Each button press updates this snapshot to the current one. This profile will not be saved.</p> <h3>Undoing changes to the 2D / 3D data</h3> <ul><li><strong>Undo All:</strong> Resets all changes made to the 2D/3D data and returns to the condition at start.</li> <li><strong>Undo Last:</strong> Reverts the last change made to the 2D/3D data by invoking a function. This will only work once and will not undo multiple steps.</li> <li><strong>Accept &amp; Quit:</strong> Closes the window while keeping all edits made to the 2D/3D data so far.</li> <li><strong>Save as:</strong> Saves the 2D/3D data under a different name and undoes all edits made to the original data.</li> </ul><h3>Normalization buttons</h3> <p>These functions work on the current layer. Currently, three normalization functions are implemented:</p> <ul><li><strong>Div. by Profile:</strong> This divides the 2D image by the current profile (each column in horizontal mode and each row in vertical mode, respectively). The profile is slightly smoothed before the division to avoid amplifying noise. Holding the <strong>ctrl / command</strong> key while pressing the button prevents this smoothing step. See further below how to modify the smoothing parameter.</li> <li><strong>Each Maximum:</strong> Finds the maximum of each row (horizontal mode) or each column (vertical mode) and divides the row / column by this value. This is useful, for example, to equalize the data in one direction (use the Keep avg. Int. checkbox to prevent downscaling of the data to 1)</li> <li><strong>A user-defined button (here labeled ‘Ring Currrent’):</strong> Normalize by user provided information. This can be any data parameter or wave saved in the current experiment. Examples are normalization by a secondary readout, time, concentration etc. See the last section on how to define your own functionality here.</li> <li><strong>Keep average Int. checkbox:</strong> This will preserve the average intensity when normalizing the 2D data. Normalization involves division by some normalization term, which reduces the intensity. This checkbox will rescale the data back to the intensity level before normalization.</li> </ul><h3>The Delete ROI Section button</h3> <p>This button removes the columns (horizontal) or rows (vertical) inside the Region Of Interest. If the data at the beginning of the wave is removed, the scaling is adjusted to account for the deleted points. However, if data in the center is removed the scaling cannot be adjusted, since a waves scaling must be always linear and continuous. Be aware that this may lead to a mismatch between the image data and the scaling. If the scaling is important (e.g., a continuous energy scale), either refrain from using this feature or take care to only remove sections at the edges. If 3D data is edited, this will delete the selected columns or rows on all layers.</p> <h3>The Subtract Profile button</h3> <p>The current profile will be subtracted from each column (horizontal mode) or row (vertical mode) of the 2D image or current layer of 3D data. This can be used, for example, to remove constant features from a measurement which appear undisturbed in part of the data and thus can be selected with the ROI lines.</p> <p>This button has an additional functionality <em>only in horizontal mode</em>: The spectrum can be shifted each column step according to the Y-axis delta. In other words, each increasing column the Y-scale delta value is added to (or subtracted from) the profile’s x scaling, which subtracts the profile in <em>diagonal</em> direction. This is useful to subtract features which change with the parameter on the Y scale like, for example, spectral features moving with increasing photon energy.</p> <ul><li>Hold <strong>ctrl / command</strong> to subtract the profile along <strong>increasing Y delta values</strong>.</li> <li>Hold <strong>alt / option</strong> to subtract the profile along <strong>decreasing Y delta values</strong>.</li> </ul><p>Below example shows the diagonal subtraction result:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="102b1734-043e-4c42-b537-5790251a2352" height="282" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_diagonal%20example.jpg" width="578" /></p> <h3>The Shift +/- buttons</h3> <p>These two buttons only work horizontally (regardless of the selected mode) and are used to add or subtract the Y-axis scale from the X-axis. All layers of 3D data are processed. In other words, the X-scaling of each column is adjusted by its respective Y-scaling value; the data is recalculated into a parallelogram. This will straighten features in the data which were changing with increasing Y values. An example would be a photon-energy (Y) scan of a spectrum where certain spectral features increase in their (X) emission energy. Subtracting the photon energy scale from a photoelectron spectrum in a kinetic energy scale would give binding energy, while adding the photon energy scale reverts back to kinetic energy. The effect is illustrated again with above example data:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="232e657b-94d0-475a-86b8-fe40301c1291" height="280" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_shift%20example.jpg" width="500" /></p> <p>Hold <strong>ctrl / command</strong> to cut partial data after the shift has been applied (the parallelogram is cut back into a rectangle). Note that this might fail if there is not even one complete row of data left (the skew of the parallelogram is too large to fit a rectangle inside).</p> <h3>Align Features functionality</h3> <p>This algorithm looks for similar features of each column (horizontal mode) or row (vertical mode) of the 2D image or current layer of 3D data and tries to align these features for maximum overlap by shifting each column / row by a certain amount. The algorithm uses wave correlation and shifts the data in whole point steps (no interpolation) or sub-steps (interpolated) when the <strong>Sub-steps</strong> checkbox is enabled. This can be used, for example, to correct slight shifts of peaks in a spectrum or to estimate the shift of a peak versus some other parameter like time or position:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="f96bb5b8-6b97-4ff5-986b-7dff870bd4b5" height="273" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_align%20example.jpg" width="571" /></p> <p>The algorithm uses the first column (bottom to top in horizontal mode) or row (left to right in vertical mode) of the data as reference and tries to align all other columns / rows to this reference. Hold <strong>shift</strong> to use the last row / column instead (top to bottom in horizontal mode and right to left in vertical mode).</p> <p>Often, it is not desired to align to the full data with lots of different features. Setting the A and/or B cursors onto the image will limit the range from which the reference is selected to maximize overlap with only one selected feature. This might still fail if many similar features are present.</p> <p>Activate <strong>Smooth </strong>to smooth the data before aligning. This can improve the results for noisy data.</p> <p>Activate <strong>Align Edges</strong> to search for maximum overlap of edge features instead of peak features. The derivative of the data is used for this purpose.</p> <p>The <strong>Substeps feature</strong> is activated by default, which aligns features in steps smaller than the distance of data points, <em>i.e.</em>, by using interpolation. Deactivating this feature by unchecking the checkbox will instead move data in integer steps.</p> <p>Activate <strong>Output Shift Result</strong> to write the shift values into a wave with the name ending "_shft". The output is scaled by the 2D data’s wave scaling.</p> <p>Note that the algorithm is ‘dumb’ in a sense that it only looks for the maximum correlation and not if peak features really match etc. In the worst case this just aligns artifacts such as noise.</p> <h3>Image contrast and color controls</h3> <p>You can choose the used color table and adjust the contrast of the image or currently selected layer by using the drop-down menu and the adjustment sliders. Select the desired color table and slide the Min and Max controls until the contrast is as desired. The sliders only have a range between the maximum and minimum data value of the image or currently selected layer, so the contrast cannot be reduced further, only increased. If you reverse the position of the Min and Max sliders then the colors of the image will be inverted.</p> <h2>Additional controls for 3D data (volumes)</h2> <h3>Layer and Merge controls</h3> <p>The <strong>Layer</strong> setting chooses the currently displayed layer of a 3D data set. The profile will only be created from this layer and most functions for editing data will only act on this one layer (there are exceptions like Delete ROI Section and Shift). The <strong>Delete </strong>button will delete the currently shown layer. The <strong>Merge All </strong>button will merge all (remaining) layers into a single 2D image which can then be worked on further. This can be reverted by using the Undo buttons. The scaled position of the current layer will be displayed in the top-right corner of the image.</p> <h3>Displaying profiles from all layers</h3> <p>Activating <strong>Multiple Profiles</strong> will show profiles of all layers, which are generated from the current ROI, simultaneously for comparison with the main profile from the current layer (shown in a bold line). This is useful, for example, to follow small changes in signal throughout the layers. The <strong>Separation</strong> control can be used to change the vertical spacing between the profiles. This spacing is in percent of the maximum y value. These profiles will also be saved in a wave with the ending "_map". The maximum number of profiles (layers) for this functionality is 100.</p> <h3>Rotating a 3D volume</h3> <p>3D data can be rotated by 90 degrees around the principal axes x,y,z in clockwise and counter-clockwise direction. Use the designated buttons at the bottom of the panel for this purpose. Rotations can be undone using the Undo buttons. After rotation the top-most layer is displayed at the beginning. If the layer is empty (only zeros) then the image might look all white. This is no bug, but the normal way how empty layers are displayed. Rotation might reverse the x- and/or y-axes, depending on the new orientation of the volume's contents. For this reason, the data might 'look reversed' when displayed in a normal image plot.</p> <p> </p> <h2>Quick access functions in the menu</h2> <p>Some useful functions are available in the Spectra Tools menu:</p> <ul><li><strong>Append 1D,2D Datasets into 2D Data:</strong> Combines the columns (Y dimension) of multiple datasets (e.g., multiple measurements) into one consecutive 2D data wave. The X dimension is extended to cover the full X range of all datasets if needed.</li> <li><strong>Stack 2D Datasets into 3D Data:</strong> Stacks multiple 2D spectra (e.g., MCP images) on top of each other to produce a 3D array.</li> <li><strong>Profile of 2D\3D Data:</strong> Same as creating a profile over the full data in horizontal or vertical mode using the profile panel. This will give 1D data for a 2D input, or 2D data or a 3D input. Hold <strong>shift</strong> while invoking the menu to define a sub-range in the respective dimension for profile generation.</li> <li><strong>2D Image from 3D Data:</strong> Sums 3D data in the layer (array) direction to give a 2D image (e.g., gives a sum of all MCP images of a 3D array).</li> <li><strong>Split Up 2D\3D Data:</strong> Separates 2D / 3D data into individual waves holding columns, rows or layers. The individual waves are saved in a folder with the name of the input.</li> </ul><p>In Igor 9, these options are also available in the right-click menu of the data browser.</p> <p> </p> <h2>Creating profiles and splitting data from the command line</h2> <p>Some quick access functions can be directly invoked. To create a profile use:</p> <span class="geshifilter"><code class="igor geshifilter-igor">QProfile<span style="color: #000000;">&#40;</span>input_wave, dimension <span style="color: #000000;">&#91;</span>,from ,to ,from_Point ,to_Point<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span></code></span> <p>Here dimension is an integer value from 0 to 2, with the meaning of 0 = vertical profile (average rows), 1 = horizontal profile (average columns), 2 = z profile (average layers). Use the optional 'from', 'to' or the 'from_Point', 'to_Point' values to define a sub-range in terms of scaled values or point values, respectively. If both types are specified the former takes precedence.</p> <p>Data can be split along a dimension via:</p> <span class="geshifilter"><code class="igor geshifilter-igor">QImageSplit<span style="color: #000000;">&#40;</span>input_wave, dimension<span style="color: #000000;">&#41;</span></code></span> <p>Here, the dimension parameter has the same meaning as above.</p> <p>To reduce the fidelity of data you can bin data points by using:</p> <span class="geshifilter"><code class="igor geshifilter-igor">QuickBinData<span style="color: #000000;">&#40;</span>input_wave, binX, binY, binZ<span style="color: #000000;">&#41;</span></code></span> <p>Here, binX, binY, binZ should be integer values greater or equal to 1, which decide by how much the data in the respective dimension is binned. For example, using binX = 2 will result in a wave with half of the points in the x (row) dimension. Data can be binned in multiple dimensions simultaneously.</p> <p> </p> <h2>Procedure settings and user button code</h2> <p>The procedure header has two global constants which control the smoothing factor of …</p> <ul><li><strong>kNormProfileSmooth:</strong> Sets the smoothing factor as an integer for profile normalization. The profile is smoothed by this factor before used for division with the 2D data.</li> <li><strong>kAlignSmooth:</strong> The initial smoothing factor applied to each row / column before the correlation is calculated. Useful to suppress noise. The factor can be adjusted at any time inside the panel.</li> </ul><h3>The user-defined (normalization) button</h3> <p>Two functions and one global variable are used to provide the functionality for the user button:</p> <ul><li><strong>kUserInfoBtnName:</strong> Defines the button’s label and can be changed to reflect the purpose of the button. This name should be short to fit inside the button.</li> <li><strong>Profile_ActivateUserInfoButton(inputWave):</strong> A function for checking whether the conditions for using the button are fulfilled. A return value of 1 activates, any other value disables the button. One could for example check here if the required information is contained in the 2D data or loaded in the current experiment.</li> <li><strong>Profile_ExecuteUserInfoButton(inputWave)</strong>: This function is called to do the normalization (or whatever you like to do here). Return a scaling factor for scaling the intensity to its average after the normalization step should the Keep average Int. checkbox be activated (returning 0 skips this step).</li> </ul><p>You can modify the constant and the two functions directly at the beginning of the procedure file, but it is more convenient to provide your own code in a separate file or inside the experiment environment. Use the <strong>Override</strong> keyword in front of the Function / StrConstant statement to override the standard definitions inside the package. Have a look at the example implementation inside the project’s procedure, which is used to normalize the ring current of synchrotron experiments saved inside the 2D data itself.</p> <p>While the user button is intended for normalization, it is really a free-for-all button for any modification to the 2D data you may want. You could instead write a function which, for example, splits the image in half or applies an interpolation or does something completely different in each experiment file.</p> <p>The following code shows the current implementation of the user-definable normalization button:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">StrConstant</span> kUserInfoBtnName = <span style="color: #009c00;">&quot;Ring Current&quot;</span>&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// the title of the user button</span><br /> <br /> <span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">Function</span> Profile_ActivateUserInfoButton<span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> inwave<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> activate = <span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++ conditions for activation +++</span><br /> &nbsp; &nbsp; activate = <span style="color: #c34e00;">StringMatch</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">GetDimLabel</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span>,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span>,<span style="color: #009c00;">&quot;*mA*&quot;</span><span style="color: #000000;">&#41;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// check if dim-labels contain &quot;mA&quot; values</span><br /> &nbsp; &nbsp; activate = <span style="color: #c34e00;">StringMatch</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">note</span><span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span>,<span style="color: #009c00;">&quot;*ring current normalized*&quot;</span><span style="color: #000000;">&#41;</span>? <span style="color: #000000;">0</span> : activate&nbsp; <span style="color: #ff0000; font-style: italic;">// already normalized?</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> activate <span style="color: #ff0000; font-style: italic;">// return 1 to activate button</span><br /> <span style="color: #0000ff;">End</span><br /> <br /> <span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">Function</span> Profile_ExecuteUserInfoButton<span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> inwave<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> valAvg = <span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++ ring current normalization procedure +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> <span style="color: #c34e00;">i</span>, value<br /> &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">i</span> = <span style="color: #000000;">0</span>; <span style="color: #c34e00;">i</span> <span style="color: #000000;">&lt;</span> <span style="color: #c34e00;">DimSize</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>; <span style="color: #c34e00;">i</span> += <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">String</span> Currlabel = <span style="color: #c34e00;">GetDimLabel</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span>,<span style="color: #c34e00;">i</span><span style="color: #000000;">&#41;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// get the information from the column label</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007575;">sscanf</span> Currlabel, <span style="color: #009c00;">&quot;%s (%f mA)&quot;</span>, Currlabel, value&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// search for ring current info in the form &quot;time (XXX mA)&quot;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>value <span style="color: #000000;">!</span>= <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inwave<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #c34e00;">i</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">/</span>= value<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; valAvg += value <span style="color: #ff0000; font-style: italic;">// add the values for intensity re-normalization later</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endfor</span><br /> &nbsp; &nbsp; valAvg <span style="color: #000000;">/</span>= <span style="color: #c34e00;">i</span>+<span style="color: #000000;">1</span><br /> &nbsp; &nbsp; <span style="color: #c34e00;">Note</span> inwave, <span style="color: #009c00;">&quot;ring current normalized&quot;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// write into note that the normalization has been done</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> valAvg &nbsp; <span style="color: #ff0000; font-style: italic;">// return the intensity normalization factor</span><br /> <span style="color: #0000ff;">End</span></div></div> <p> </p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> <span class="entity-reference">7.00.x</span> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> <article data-comment-user-id="15087" id="comment-21200" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/15087"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">Rob</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613643573"></mark> <span class="comment-body"><p>Wow. That single handily replaces 90% of the scripts I use every day with one convenient panel!</p> <p>Thank you for sharing 😊</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21200&amp;1=default&amp;2=en&amp;3=" token="iDtWkgu4FFxLGU4Pw4omGPiVkLyH1VC2tS-FVC8EKaU"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 02:19 am - <a href="/comment/21200#comment-21200" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21216" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/1029"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/chozo/profile-images/2022-03/WM%20Logo3.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">chozo</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613698229"></mark> <span class="comment-body"><p>Great to hear. Thank you for your comment! I think this tool saves me the most time as well (others are graph-related tools which I haven't put up here yet ;). I guess the other 10 % are specialized scripts only related to your field? Please let me know if there is a feature which would make your (and others) life easier.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21216&amp;1=default&amp;2=en&amp;3=" token="WI7FVmYKRcLuj-w7HHTD5icdHNHWFNF7mM4Wd5TWi10"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 05:30 pm - <a href="/comment/21216#comment-21216" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="10776" id="comment-22789" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/10776"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">olelytken</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1648026981"></mark> <span class="comment-body"><p>I couldn't help noticing the images for the Subtract Profile and Shift +/- sections. Those images look very similar to the Auger-yield NEXAFS data that we were battling with for a long time. In the end we used an iterative process to split up the data into vertical NECAFS and diagonal XPS contributions. If you are working with the same problems you might be interested in the paper.</p> <p>"Removing photoemission features from Auger-yield NEXAFS spectra" <a href="https://doi.org/10.1016/j.elspec.2017.05.012">https://doi.org/10.1016/j.elspec.2017.05.012</a></p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=22789&amp;1=default&amp;2=en&amp;3=" token="8HhS1WAdQaDJYsN4p1WDQT1ySc-jx8RWNCd4idecPzU"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 23, 2022 at 02:16 am - <a href="/comment/22789#comment-22789" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-22790" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/1029"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/chozo/profile-images/2022-03/WM%20Logo3.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">chozo</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1648035501"></mark> <span class="comment-body"><p>Thank you for your comment and the link to the paper. I will take a look. Yes, this was exactly the reason for this functionality. The Subtract function relies on the fact that the XPS signal is present undisturbed in part of the scan and thus can be subtracted from the mixed image. We achieved this by simply measuring a sufficiently large range below the edge in question. This is of course complicated by second-order signal contributions, which are however often sufficiently small in our spectra. It might be interesting to add your approach to this package. What do you think?</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=22790&amp;1=default&amp;2=en&amp;3=" token="2Sc35gFiHuV_Kw4Q4veKXzs2i46Uz_BNpi7I1A8q4NY"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 23, 2022 at 04:38 am - <a href="/comment/22790#comment-22790" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="10776" id="comment-22792" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/10776"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">olelytken</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1648058268"></mark> <span class="comment-body"><p>I did notice you expanded the kinetic energies far enough to where the Auger peaks are gone. I guess there are still some secondary electrons left, but it's good enough to where you can extract a reasonable XPS spectrum and subtract it.</p> <p>If you want to try my approach out you can find it here <a href="http://www.wavemetrics.com/project/EccentricXPS">www.wavemetrics.com/project/EccentricXPS</a><br /><br /> There is a pretty good help file and an example .pxp file you can test the cleanup procedure on. If you think it would fit into your package I would be happy to help you add it, but it's probably best if you test it first and see if you think it will fit.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=22792&amp;1=default&amp;2=en&amp;3=" token="SotJdwDdi0bR7uV6M7EFCAF4_QFnu-qbSEDjxzPpTJA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 23, 2022 at 10:57 am - <a href="/comment/22792#comment-22792" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="10776" id="comment-22793" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/10776"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">olelytken</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1648059517"></mark> <span class="comment-body"><p>Load the examples file and run Photoemission Cleanup from the top menu</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=22793&amp;1=default&amp;2=en&amp;3=" token="LCwMluNe7Hpj6_QcsW8DVUCRBONtLK2HbC5XZK5nwcY"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 23, 2022 at 11:18 am - <a href="/comment/22793#comment-22793" hreflang="en">Permalink</a></p> </article> </section> Tue, 16 Feb 2021 03:44:27 +0000 chozo 21549 at https://www.wavemetrics.com LEEM-PEEM Analysis https://www.wavemetrics.com/node/21490 LEEM-PEEM Analysis <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/f-cheynis" lang="" about="/user/f-cheynis" typeof="schema:Person" property="schema:name" datatype="">F. Cheynis</a></span> <span>Fri, 12/11/2020 - 01:20 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><h3>About</h3> <p>LEEM-PEEM Analysis a program package to extend the image analysis tools provided by Elmitec GmbH acquisition software Uview2000 for the Low-Energy Electron Microscopy (LEEM) and Photo-Emission Electron Microscopy (PEEM) techniques. This package is freely available to the LEEM-PEEM user community considering that the authors will be pleased that the following reference be cited: <a href="https://doi.org/10.1063/1.4871437">Rev. Sci. Instru. 85 (2014) 043705</a>.</p> <h3>Features</h3> <ul><li>The Graphical User Inferface (GUI) is divided into three parts. The most outfitted component concerns Elmitec GmbH Uview2000 movies (<em>.dav</em>) or image sequences (<em>.dat</em> sequence). These files are opened with a dedicated button. Vizualisation of the sequence is then possible. The built-in "Image Contrast" panel developed by Wavemetrics can be used to adjust the image rendering.</li> </ul><ul><li>Standard file-handling procedures are implemented such as <strong>Extract</strong> (<em>e.g.</em> to select certain images of the original data and create a new movie) and <strong>Convert</strong> (to generate a <em>.mov</em> or a <em>.avi</em> movie for presentations).</li> </ul><ul><li>Image processing includes polynomial background removal (<strong>Backgrnd</strong>) using Igor Pro built-in procedure.</li> </ul><ul><li>Two approaches are implemented for image drift correction (<strong>Drift. Corr.</strong>). The first is based on an automated image-to-image intercorrelation. The second approach requires that the user marks/locates a given detail on the surface under consideration in different images of the sequence. The drift is then linearly interpolated between these positions and a new movie is created.</li> </ul><ul><li>A particle analysis procedure (<strong>Part. Anal.</strong>) is also available. An arbitrary number of particles (<em>i.e.</em> black, resp. white, areas on a white, resp. black, background) are characterized (area and<em> x, y</em> position) as a function of the movie image number. Manual and Iterated built-in thresholding methods are implemented to detect automatically the current position of a given particle. A procedure to measure the intensity of a given region-of-interest along the image sequence is implemented (<strong>I<sub>ROI</sub></strong>). This is particularly useful for <strong>reflectivity I(V)</strong> curves.</li> </ul><ul><li>The second and third components of the GUI enable to display in Igor Pro <em>.mov</em> movies and various types of individual images obtained from Elmitec acquisition software (<em>.dat</em>) or in standard formats (<em>.tiff</em>, <em>.png</em>, and <em>.jpeg</em>).</li> </ul><h3>Install</h3> <ul><li> You need Igor Pro 6.3 or higher.</li> </ul><ul><li>Unpack the .zip file.</li> </ul><ul><li><strong>LEEM_Analysis2009.ipf</strong> and <strong>LEEM_Analysis2015.ipf</strong> files are global procedures. So simply move them to the 'Igor Procedures' folder or in a folder with an alias pointing to it in the 'Igor Procedures' folder.</li> </ul><ul><li>All other '<strong>.ipf</strong>' files are shared procedures. Move these '<strong>.ipf</strong>' files in the 'User Procedures' folder or in a folder with an alias pointing to in in the 'User Procedures' folder.</li> </ul><ul><li>Start Igor Pro. 'LEEM analysis 2009' and 'LEEM analysis 2015' items should be available in the 'Macros' menu. Choose the item according to the year release of your Uview2000 software. This creates the main panel. Enjoy !!</li> </ul><h3>Limitations</h3> <ul><li>So far only 1024x1024 images and image sequences are supported.</li> <li>This package is provided as-is without any warranty.</li> </ul></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/LEEM-PEEM%20analysis%20GUI.PNG"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/LEEM-PEEM%20analysis%20GUI.PNG" width="340" height="300" alt="User interface of the LEEM-PEEM analysis package" typeof="foaf:Image" class="content_body" /> </a> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/LEEM-PEEM%20analysis.PNG"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/LEEM-PEEM%20analysis.PNG" width="590" height="300" alt="Typical configuration of the LEEM-PEEM analysis package interface" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> </section> Fri, 11 Dec 2020 09:20:43 +0000 F. Cheynis 21490 at https://www.wavemetrics.com Radial Profiler Demo https://www.wavemetrics.com/node/21289 Radial Profiler Demo <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/jjweimer" lang="" about="/user/jjweimer" typeof="schema:Person" property="schema:name" datatype="">jjweimer</a></span> <span>Sat, 05/23/2020 - 04:05 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> </span> <span class="body"><p>This package contains a demo version of a control panel as a starting point to create radial profiles over features (blobs) in a (grayscale - 2D) image.</p> <p>This package requires the <a href="https://www.wavemetrics.com/node/21002">Image Tools Package</a>.</p> <p>The ZIP archive contains a video tutorial of how to use the radial profiler.</p> <p>The demo version will only find the blob and show the row/column profiles. Contact me off-line when you are interested in the full version.</p></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/RadialProfilerImagev100.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/RadialProfilerImagev100.png" width="623" height="300" alt="Radial Profiler v100 Image" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Sat, 23 May 2020 23:05:44 +0000 jjweimer 21289 at https://www.wavemetrics.com Image Tools https://www.wavemetrics.com/node/21002 Image Tools <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/jjweimer" lang="" about="/user/jjweimer" typeof="schema:Person" property="schema:name" datatype="">jjweimer</a></span> <span>Wed, 08/07/2019 - 11:08 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> </span> <span class="body"><h3>Background</h3> <p>This package is presented as a way for users to load, display, and print out summary views from sets of TIFF images or internally-existing xy/image waves without needing to write code.</p> <h3>Operation</h3> <p>Once installed, the package is accessible from the Analysis --&gt; Image Tools sub-menu.</p> <p>The displayed content is divided as four frames.</p> <ul><li>An image display window shows the currently active image</li> <li>A control bar on the top of the main display sets the parameters in the viewing window</li> <li>A histogram graph shows the histograms for the image being displayed.</li> <li>Operation of the package is done using inputs on a control panel.</li> </ul><p><img alt="" data-entity-type="" data-entity-uuid="" src="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/ImageToolsv300.png" width="600" /></p> <h4>Image Control Bar</h4> <ul><li>Split view to show variations in images from current folder side-by-side</li> <li>Change the image range (contrast adjustments), invert, or show as black &amp; white</li> <li>Change the color scale used to display the image</li> <li>Swap main and split images (left and right sides)</li> </ul><h4>Main Tab</h4> <h5>Image Displayed</h5> <ul><li>Step through images that are loaded as sets using buttons to advance or go backward in the loaded sets.</li> <li>See the image size (pixels) and bit depth.</li> <li>View/Add notes to an image file (wave).</li> <li>Play a movie from a stack</li> </ul><h5>Display Information</h5> <ul><li>Shows the positions of the marquee when drawn on the image</li> <li>Toggle on/off the histogram display with linear and log scales as well as cumulative and derivative histograms.</li> <li>Scale the derivative histogram to search for positions of zero crossings (peaks in histogram).</li> <li>Choose a region of interest (RoI) for a sub-set of analysis</li> <li>Choose inside, outside, inside - outside, and outside - inside analysis for histogram</li> <li>See where the RoI is in image coordinates.</li> <li>Lock the RoI to continue using the selection tool on the image.</li> <li>Shows the min/max in the image and in the selected RoI (if present)</li> </ul><h4>Load Tab</h4> <h5>Load TIFF(s)</h5> <ul><li>Load a single RGB image, multiple RGB images, a folder of RGB images, or a selection of RGB images from a stack.</li> <li>Do the same to load grayscale images.</li> <li>Load / Convert existing xy waves to a format that can be used within the package</li> <li>Choose to keep the source (or not), to extract any one or all of the RGB channels, and/or to create a grayscale image.</li> </ul><h5>Load Other Image Formats</h5> <p>To load other image file types, first load them directly into the experiment using the IgorPro menu option (Load Image). Select the Internal Data Folder option in the Load tab to convert the images to a format used within Image Tools. This option has been tested with JPG formats. </p> <h4>Calibrate Tab</h4> <h5>Calibrate XY</h5> <ul><li>Set a calibration factor for pixel, image width, or image height to apply locally or globally</li> </ul><h5>Calibrate Intensity</h5> <ul><li>Invert, normalize (by height or flux density), and apply an equation using "I" for intensity as well as "x,y" for position<br /> Example Equations: (I^2) will square the intensity or (I &lt; 20 ? 0 : I) will set all intensity values below 20 to zero</li> </ul><h4>Process Tab</h4> <h5>Remove Background</h5> <ul><li>Manually set or edit grid points that denote the background locations</li> <li>Create NxM grids that ignore marquee regions (rectangle or oval), threshold, or fill regions</li> <li>Apply an operation to remove a background having various plane orders through the grid points</li> </ul><h5>Threshold</h5> <ul><li>Apply a thresholding method to one image, each image, or all images in a stack.</li> <li>Fill the threshold</li> </ul><h5>Mask Image Regions</h5> <ul><li>Use drawing regions, the marquee, a threshold image, or a fill image to highlight regions of interest</li> </ul><h5>Math on Stack (for Image Stacks)</h5> <ul><li>Average + Standard Uncertainty, Derivative, or Integral over the stack</li> </ul><h4>Publish Tab</h4> <h5>Image Layout</h5> <ul><li>Turn on/off axes</li> <li>Turn on/off scale bar and set its location / color</li> </ul><h5>Contact Print</h5> <ul><li>Store the image to a list to use for a contact print</li> </ul><h3><strong>Caveats</strong></h3> <ul><li>This package has been developed for analyzing single-channel images. It may do some things correctly with RGB images or 4-stack images, however no guarantees are given for these types of images. Convert RGB or 4-stack images to grayscale or read only each individual channel accordingly.</li> <li>This program can load image stacks (TIFF movies). That does not however mean that it will handle them all with equal efficiency. Load larger files as stacks using the selections to load only a certain range in the movie and/or to load only a certain sequence (e.g. every 10th image).</li> </ul><h3>Further Help</h3> <p>Tutorial videos are available at either link below.</p> <p><a href="https://www.dropbox.com/sh/47xycixobhec14n/AAD8ARkbGN6sm2GsYfD4pOeVa?dl=0">Dropbox Link to Video Tutorials</a></p> <p><a href="https://drive.google.com/drive/folders/1YjdmH0gws0mMgR5ZXlQqIAq5rP5aJ9sl?usp=share_link">GoogleDrive Link to Video Tutorials</a></p></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/ImageToolsv300.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/ImageToolsv300.png" width="523" height="300" alt="Image Tools v3.00" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> <article data-comment-user-id="25" id="comment-19388" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/25"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/jjweimer/profile-images/2018-12/meimage.jpg" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">jjweimer</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1579029825"></mark> <span class="comment-body"><p>I would be grateful to hear from folks who find this package useful, who would like to see features added to it, or who would like to contribute to its development. Please contact me with comments here or via a direct email.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=19388&amp;1=default&amp;2=en&amp;3=" token="MFCzq4z6cLrqin6CHv2HeJ0RTqA7XfNmUHBpyYw0e7w"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">January 14, 2020 at 11:23 am - <a href="/comment/19388#comment-19388" hreflang="en">Permalink</a></p> </article> </section> Wed, 07 Aug 2019 18:08:15 +0000 jjweimer 21002 at https://www.wavemetrics.com Quick ROI inspector https://www.wavemetrics.com/project/Quick_ROI_inspector Quick ROI inspector <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> </span> <span><a title="View user profile." href="/user/inchinn" lang="" about="/user/inchinn" typeof="schema:Person" property="schema:name" datatype="">inchinn</a></span> <span>Tue, 06/06/2017 - 08:38 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> </span> <span class="body">//// This marquee tool is for analysing time series movies.<br /> ////Use the marquee tool to mark an ROI, right click and select quickroi.<br /> ////This is then appended to the image with its coordinates printed to the history.<br /> ////The average of the pixel values within the ROI in each frame is calculated and<br /> //// shown in the wave QROI. If you select a new ROI this everything is updated.<br /> /// You can also use the "subtract background" button to subtract the average of the <br /> ////ROI pixels from the whole image on a frame by frmae basis. Useful for analysing Ca imaging movies<br /> /// When done hit the done button to kill all waves and variables</span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">6.20.x</span> </span> <section class="comment-section"> </section> Tue, 06 Jun 2017 15:38:57 +0000 inchinn 7749 at https://www.wavemetrics.com SimpLiFi - Simple line profiles for TEM/STEM images https://www.wavemetrics.com/project/SimpLiFi SimpLiFi - Simple line profiles for TEM/STEM images <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> </span> <span><a title="View user profile." href="/user/kpantzas" lang="" about="/user/kpantzas" typeof="schema:Person" property="schema:name" datatype="">kpantzas</a></span> <span>Tue, 04/11/2017 - 08:16 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> </span> <span class="body">The SimpLiFi package provides an interface for extracting and analyzing line profiles from TEM/STEM images. This tool is in part a simplified version of the Image Line Profile tool provided in the ImageProcessing package by WaveMetrics ( SimpLiFi does not handle paths - only straight lines - and only greyscale images). It is also in part modified to mimic functionalities of the Line Profile tool available in Gatan's Digital Micrograph:<br /><br /> - A Frame is displayed on the image to show the width over which the profile is drawn<br /> - Two cursors can be displayed on the profile graph to compute the thickness of a feature (e.g. a layer), and also extract the mean image intensity, as well as an average of values that are within 5% of the max and 5% of the min of the profile section between the cursors<br /> - Dashed lines are displayed on the image to show the position of cursors on the profile graph<br /> - The computed values (thickness, average, min, max) can be exported to a Results wave<br /> - The Results wave can be displayed in a Table<br /><br /> This project is still in development and will evolve as my understanding of IGOR programming evolves. Comments and suggestions are welcome.<br /></span> <section class="comment-section"> </section> Tue, 11 Apr 2017 15:16:38 +0000 kpantzas 7660 at https://www.wavemetrics.com EccentricXPS - Analysis and Organisation of XPS Spectra https://www.wavemetrics.com/project/EccentricXPS EccentricXPS - Analysis and Organisation of XPS Spectra <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/olelytken" lang="" about="/user/olelytken" typeof="schema:Person" property="schema:name" datatype="">olelytken</a></span> <span>Wed, 03/01/2017 - 09:22 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> <span class="entity-reference"><a href="/taxonomy/term/39" hreflang="en">Curve Fitting</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> </span> <span class="body"><p>EccentricXPS is an Igor Pro procedure initially written to load, display and analyze the two-dimensional x-ray photoelectron spectroscopy (XPS) images produced by our VG Scienta SES 200 hemispherical analyzer at the University of Erlangen-Nuremberg. EccentricXPS can load and display the images from the raw .txt files produced by the SES software (version 1.2.2, build 37) and then convert the images to normal one-dimensional spectra, which can be easily displayed, compared and fitted, either as single spectra or in bulk.<br /><br /> Over time the procedure has been expanded to also be able to load, display and analyze the Auger-yield NEXAFS images we have been measuring at the Materials Science beamline at Elettra in Trieste using the KolXPD software (version 1.8.0.42). The Auger-yield NEXAFS images, measured as photon energy vs. kinetic energy, can be displayed, photoemission features travelling through the images can be removed and the spectra converted into normal one-dimensional spectra. These one-dimensional spectra can, just as the XPS spectra, easily be displayed, compared and fitted, either as single spectra or in bulk as a group.<br /><br /> A more thorough description of how the photoemission features are removed from the NEXAFS images can be found here: <a href="https://doi.org/10.1016/j.elspec.2017.05.012">https://doi.org/10.1016/j.elspec.2017.05.012</a><br /><br /> The EccentricXPS_v1.201.zip file contains the procedure file EccentricXPS_v1.201.ipf, an extensive help file EccentricXPS_Help_v1.201.ihf, and an Igor experiment file EccentricXPS_Examples_v1.201.pxp with a collection of spectra that can be used to test the full functionality of EccentricXPS.<br /><br /> To have the procedure load automatically when you start up Igor Pro copy the procedure file EccentricXPS_v1.201.ipf, or a shortcut to the file, into your Igor Procedures folder, typically located in C:\Program Files\WaveMetrics\Igor Pro Folder\Igor Procedures. To have the help file load automatically you also need to copy the EccentricXPS_Help_v1.201.ihf file, or a shortcut to the file, into your Igor Help Files folder, typically located in C:\Program Files\WaveMetrics\Igor Pro Folder\Igor Help Files.<br /><br /> The procedure when loaded will create two new menu items: XPS and NEXAFS. A good place to start would be to click Help in the XPS menu, which will open the help file and a description of what the different menu selections will do.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">6.30.x</span> </span> https://opensource.org/licenses/MIT <section class="comment-section"> </section> Wed, 01 Mar 2017 17:22:16 +0000 olelytken 7577 at https://www.wavemetrics.com ALP Alternate Line Profile https://www.wavemetrics.com/project/ALP ALP Alternate Line Profile <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> </span> <span><a title="View user profile." href="/user/rkigorexch" lang="" about="/user/rkigorexch" typeof="schema:Person" property="schema:name" datatype="">rkigorexch</a></span> <span>Sat, 12/24/2016 - 09:39 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> </span> <span class="body">Why ALP?<br /> The Igor 7 image line profile has fewer features than in Igor 6. Wavemetrics is not currently planning to make significant changes, the <br /> workaround suggested is to use IP6 procedures. Some issues are:<br /> - The profile graph cannnot be modified, or the data explored, for example with a cursor.<br /> - Does not take wave scaling into account.<br /> - No longer possible to graph a profile, it can only be saved. (Has been changed in Igor 7.02)<br /> - The saved wave is now a triplet. This is not visible in the default New Graph menu, inexperienced users can not easily graph it themselves. <br /> - The lines defining the profile are hard to see on dark images.<br /> - If a profile limit goes outside the image, the profile is NaN, instead of truncating at the edge of the image. <br /> - There is no help, only tool tips.<br /><br /> ALP is an Alternate Line Profile package intended to fill some of these needs.<br /> - supports sub-pixel interpolation.<br /> - The profile graph is fully accessible.<br /> - Image wave scaling is used.<br /> - v1.1 handles 2D waves displayed vs X and/or Y waves.<br /> - The profile can be specified in pixel or scaled units.<br /> - There are two graphing options, together in one graph or separate graphs. The single graph option facilitates comparison of profiles from different images.<br /> - The profile lines on the image are easily visible.<br /> - The profiles are saved as three one-D waves, for easy discovery and use. These are the profile, and the corresponding X and Y coords. The<br /> coordinates are in scaled wave units.<br /> - Has readily available help information.<br /><br /> Updates &amp; bug fixes:<br /> - v1.1 Handles X and/or Y axis waves, as well as wave scaling.<br /> The profile graph properties are no longer reset at every update. User modifications "stick". <br /> Saved wave names are more systematic.<br /> - v1.2 Profile graph uses scaled x or y instead of pixels.<br /> Profile width increment adapted to wave scaling/axis wave.<br /> - v1.3 better switching between image windows, ALP parameters are stored in graph user data<br /> ALP lines can be hidden or retained on image when ALP is not the active top window,<br /> see constant HideLinesDefault below to control default behavior<br /> Initial profile adapts to displayed ranges, if whole image not visible. <br /><br /> USING ALP:<br /> - After importing the procedure, select Alternate Line Profile... from the Image Menu. The press the Help button for full information.</span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/images-imported/ALPv1.preview.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/images-imported/ALPv1.preview.png" width="640" height="277" title="ALP main window and profile region on " typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">7.00.x</span> </span> <a href="See ALP helps" target="_blank">View Documentation</a> See ALP procedure file <section class="comment-section"> </section> Sat, 24 Dec 2016 17:39:00 +0000 rkigorexch 7465 at https://www.wavemetrics.com