12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # -*- coding: utf-8 -*-
- """
- Created on Tue Sep 18 10:46:39 2018
- @author: Giovanni Galizia
- file to collect the routines that were in the folder "View" in IDL
- """
- import numpy as np
- import scipy.ndimage as sci
- import scipy as sc
- def SpaceFilter(frame, filtersize):
- '''
- ;this funtion filters a picture array in space with any desired kernel
- ; used for spacial smoothing of pictures
- ; Author Jasdan Joerges 12/95
- ; parameters:
- ; frame input frame
- ; filtersize size of spacial filter
- ; p parameterset
- ; results: FilteredFrame
- '''
- def DiagonalKernel(kernel,i,kernelSize):
- # i and kernelSize are separate because of the recursive nature
- # for a square kernel size 100, call DiagonalKernel(kernel,100,100)
- if kernelSize % 2 == 0: #number is even
- print('IncreaseCenterByOne not for even numbers')
- i = 1 # prevent eternal loops
- if i > (kernelSize+1)/2:
- print('View/SpaceFilter: working on kernel with i = ',i)
- #increase central region by one
- i -= 1
- kernel[kernelSize-i:i,kernelSize-i:i] += 1
- DiagonalKernel(kernel,i,kernelSize)
- else: i = 1
- return kernel
- if filtersize > 0: #triangular filter; in Jasdans version, they were done by hand. Here I use a recursive function
- kernelSize = filtersize
- #kernel = IDL.fltarr(kernelsize, kernelsize)
- kernel = np.ones([kernelSize, kernelSize])
-
- DiagonalKernel(kernel,kernelSize, kernelSize)
-
- frame = sc.signal.convolve(frame, kernel, mode='same')
- # if filtersize == 5: ###example for Jasdan's solution
- # kernel(*,*) = [1,1,1,1,1, $ ; triangular 5x5
- # 1,2,2,2,1, $
- # 1,2,3,2,1, $
- # 1,2,2,2,1, $
- # 1,1,1,1,1]
- # END
-
- ## default: all values are 1
- #;better than boxcar: triangular window average
- else: #negative filter: gaussian. In Jasdans version, it was a filter + convolve
- print('View/SpaceFilter: Gaussian filter size ',filtersize)
- frame = sci.gaussian_filter(frame, -filtersize, mode='nearest')
- # -7: BEGIN
- # kernel(*,*) = [-0.00580155,-0.00580155, -0.00580155, -0.00580155, -0.00580155, -0.00580155, -0.00580155, $ ; triangular 7x7
- # -0.00580155,-5.12869e-09,-5.12869e-09,-5.12869e-09,-5.12869e-09,-5.12869e-09,-0.00580155, $
- # -0.00580155,-5.12869e-09, 0.253284 , 0.253284 , 0.253284 ,-5.12869e-09,-0.00580155, $
- # -0.00580155,-5.12869e-09, 0.253284, 0.500000, 0.253284, -5.12869e-09,-0.00580155, $
- # -0.00580155,-5.12869e-09, 0.253284 , 0.253284 , 0.253284 ,-5.12869e-09,-0.00580155, $
- # -0.00580155,-5.12869e-09,-5.12869e-09,-5.12869e-09,-5.12869e-09,-5.12869e-09,-0.00580155, $
- # -0.00580155,-0.00580155, -0.00580155, -0.00580155, -0.00580155, -0.00580155, -0.00580155]
- # END
- #FilteredFrame = convol(Frame, kernel, /edge_truncate) / total(kernel)
- #;FilteredFrame = median(frame,filtersize)
- #return, FilteredFrame
- #end ; of program
- return frame
|