Combine convolution filters (bandpass) into a single kernel
    8 views (last 30 days)
  
       Show older comments
    
    Doctor G
 on 13 Jan 2015
  
    
    
    
    
    Commented: Doctor G
 on 13 Jan 2015
            Is there a way to take the low pass and high pass filters in the following code and combine them into a single kernel and apply one conv2() function?
*note*: length(lfilter) = 21, length(hfilter) = 81.
what we are basically doing in the last step is saying to remove the large objects from the image (after already removing the very small objects with a Gaussian blur).
    properties (Constant)
        minStar = 2; % min star radius
        maxStar = 8; % max star radius
        threshold = 12;
    end
----------
        function filter2(this)
            normalize = @(x) x/sum(x);
            lfilter = normalize(exp(-((-ceil(5*this.minStar):ceil(5*this.minStar))/(2*this.minStar)).^2));
            hfilter = normalize(exp(-((-ceil(5*this.maxStar):ceil(5*this.maxStar))/(2*this.maxStar)).^2));
            this.low = conv2(lfilter',lfilter,this.raw,'same');
            this.high = conv2(hfilter',hfilter,this.raw,'same');
            this.filtered = this.low - this.high;
            this.foreground = this.filtered > this.threshold;
        end
0 Comments
Accepted Answer
  Alfonso Nieto-Castanon
      
 on 13 Jan 2015
        Convolution is a linear operation so yes, you can combine the two filtering operations into one. Just make the filters the same size and add/subtract them. For example:
 minmax=max(this.minStar,this.maxStar);
 lfilter = normalize(exp(-((-ceil(5*minmax):ceil(5*minmax))/(2*this.minStar)).^2));
 hfilter = normalize(exp(-((-ceil(5*minmax):ceil(5*minmax))/(2*this.maxStar)).^2));
 lhfilter = lfilter - hfilter;
 this.filtered = conv2(lhfilter',lhfilter,this.raw,'same');
2 Comments
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
