Apply Directional Filters
A directional filter is an edge detector that can be used to compute the first derivatives of an image. The first derivatives (or slopes) are most evident when a large change occurs between adjacent pixel values.
Directional filters can be designed for any direction within a given space. For images, x- and y-directional filters are commonly used to compute derivatives in their respective directions. The following array is an example of a 3 x 3 kernel for an x-directional filter:
This is just one example of a possible kernel for an x-directional filter. Other filters may include more weighting in the center of the non-zero columns.
The following example uses the CONVOL function to determine the first derivatives of an image in the x-direction. The resulting derivatives are then scaled to show negative, zero, and positive slopes only. This example data is available in the examples/data
directory of your IDL installation. The code shown below creates the following images:
; Import the image from the file.
file = FILEPATH('nyny.dat', $
SUBDIRECTORY = ['examples', 'data'])
orig_imageSize = [768, 512]
; Use READ_BINARY to read the image as a binary file.
orig_image = READ_BINARY(file, DATA_DIMS = orig_imageSize)
im = IMAGE(orig_image, $
TITLE="Original New York Image", $
POSITION=[.10, .025, .90, .55], DIMENSIONS=[800, 800])
; Crop the image to focus in on the bridges:
croppedSize = [96, 96]
croppedImage = orig_image[200:(croppedSize[0] - 1) + 200, $
180:(croppedSize[1] - 1) + 180]
im01 = IMAGE(croppedImage, $
TITLE="Cropped New York Image", $
POSITION=[.10, .625, .40, .925], /CURRENT)
; Create a kernel for an x-directional filter:
kernelSize = [3, 3]
kernel = FLTARR(kernelSize[0], kernelSize[1])
kernel[0, *] = -1.
kernel[2, *] = 1.
; Apply the filter to the image:
filteredImage = CONVOL(FLOAT(croppedImage), kernel, $
/CENTER, /EDGE_TRUNCATE)
; negfilteredImage = CONGRID(-1 > FIX(filteredImage/50) < 1)
im02 = image(filteredImage, $
TITLE = "Direction-Filtered New York Image", $
POSITION = [.60, .625, .90, .925], /CURRENT)