Changeset 7959


Ignore:
Timestamp:
04/12/12 10:37:35 (7 years ago)
Author:
aivar
Message:

SLIM Plugin: Combined two sets of mask code.

Location:
trunk/projects/slim-plugin/src/main/java/loci/slim/mask
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/slim-plugin/src/main/java/loci/slim/mask/Mask.java

    r7958 r7959  
    66package loci.slim.mask; 
    77 
    8 import java.util.Collection; 
     8import java.util.Collection;  
    99 
    1010/** 
     11 * Class for keeping track of exclusion masks. 
     12 *  
     13 * Similar to a ROI, but these masks are used while examining fitted results. 
    1114 * 
    12  * @author aivar 
     15 * @author Aivar Grislis 
    1316 */ 
    1417public class Mask { 
    15  
    16     public Mask(Mask mask) { 
    17  
     18    private boolean[][] _bits; 
     19     
     20    public Mask() { 
     21        _bits = null; 
     22    } 
     23     
     24    public Mask(boolean[][] bits) { 
     25        _bits = bits; 
     26    } 
     27     
     28    public Mask(int width, int height) { 
     29        // create array of FALSE 
     30        _bits = new boolean[width][height]; 
     31    } 
     32     
     33    public boolean[][] getBits() { 
     34        return _bits; 
     35    } 
     36     
     37    public void setBits(boolean[][] bits) { 
     38        _bits = bits; 
    1839    } 
    1940 
    20     public static Mask combineOtherMasks(Mask excludedMask, Collection<Mask> masks) { 
    21         // create compatible mask 
    22         Mask returnMask = new Mask(excludedMask); 
     41    /** 
     42     * Test whether a given x and y is masked. 
     43     *  
     44     * @param x 
     45     * @param y 
     46     * @return  
     47     */ 
     48    public boolean test(int x, int y) { 
     49        boolean result = true; 
     50        if (null != _bits) { 
     51            result = _bits[x][y]; 
     52        } 
     53        return result; 
     54    } 
    2355 
     56    /** 
     57     * Sets a masked x and y. 
     58     *  
     59     * @param x 
     60     * @param y  
     61     */ 
     62    public void set(int x, int y) { 
     63        if (null == _bits) { 
     64            _bits[x][y] = true; 
     65        } 
     66    } 
     67 
     68    /** 
     69     * Adds given mask to current mask, generating a new mask. 
     70     *  
     71     * @param mask 
     72     * @return  
     73     */ 
     74    public Mask add(Mask mask) { 
     75        boolean[][] bits = mask.getBits(); 
     76        int width = bits[0].length; 
     77        int height = bits.length; 
     78        boolean[][] result = new boolean[width][height]; 
     79        for (int x = 0; x < width; ++x) { 
     80            for (int y = 0; y < height; ++y) { 
     81                result[x][y] = _bits[x][y] && bits[x][y]; 
     82            } 
     83        } 
     84        return new Mask(result); 
     85    } 
     86     
     87    /** 
     88     * Given a collection of masks, adds them all together except for one mask 
     89     * specified to be excluded. 
     90     *  
     91     * @param excludedMask 
     92     * @param masks 
     93     * @return  
     94     */ 
     95    public static Mask addOtherMasks(Mask excludedMask, Collection<Mask> masks) { 
     96        boolean[][] result = null; 
     97        int width = 0; 
     98        int height = 0; 
    2499        for (Mask mask : masks) { 
    25              
     100            if (mask != excludedMask) { 
     101                boolean[][] addition = mask.getBits(); 
     102                if (null != addition) { 
     103                    if (null == result) { 
     104                        result = mask.getBits().clone(); 
     105                        width = result[0].length; 
     106                        height = result.length; 
     107                    } 
     108                    else { 
     109                        for (int x = 0; x < width; ++x) { 
     110                            for (int y = 0; y < height; ++y) { 
     111                                result[x][y] = result[x][y] && addition[x][y]; 
     112                            } 
     113                        } 
     114                    } 
     115                } 
     116            } 
    26117        } 
    27         return null; 
     118        return new Mask(result); 
    28119    } 
    29120} 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/mask/MaskGroup.java

    r7958 r7959  
    3939        _maskMap.put(node, mask); 
    4040 
    41         //TODO 2 things: 
    42         // don't notify the caller 
    43         // don't combine the recipient's mask 
    44  
    45  
     41        // combine maska and notify other nodes 
    4642        for (IMaskNode otherNode : _nodeList) { 
     43            // don't notify the caller 
    4744            if (otherNode != node) { 
    48                 Mask combinedMask = Mask.combineOtherMasks(mask, _maskMap.values()); 
     45                // don't combine the recipients mask 
     46                Mask combinedMask = Mask.addOtherMasks(mask, _maskMap.values()); 
    4947                otherNode.applyMask(combinedMask); 
    5048            } 
Note: See TracChangeset for help on using the changeset viewer.