AIPS HELP file for NINER in 31DEC25
As of Tue Feb 18 19:24:25 2025
NINER: Applies various 3x3 area operaters to an image.
INPUTS
INNAME Input image name (name)
INCLASS Input image name (class)
INSEQ 0.0 9999.0 Input image name (seq. #)
INDISK 0.0 9.0 Input image disk unit #
OUTNAME Output image name (name)
OUTCLASS Output image name (class)
OUTSEQ -1.0 9999.0 Output image name (seq. #)
OUTDISK 0.0 9.0 Output image disk unit #.
BLC Bottom left corner of input
TRC Top right corner of input
OPCODE Operation code.
CPARM User supplied array
DPARM User supplied array
HELP SECTION
NINER
Task: Task which applies various 3x3 area operators to images.
Will handle real or integer input, blanking and data
cubes. It implements a number of area operators which
work on the 3x3 matrix of pixels containing and
surrounding each pixel in the input image. The most
unusual operator in the present version is OPCODE
'SOBL' for the Sobel edge enhancement filter.
Adverbs:
INNAME.....Input image name (name). Standard defaults.
INCLASS....Input image name (class). Standard defaults.
INSEQ......Input image name (seq. #). 0 => highest.
INDISK.....Disk drive # of input image. 0 => any.
OUTNAME....Output image name (name). Standard defaults.
OUTCLASS...Output image name (class). Standard defaults.
OUTSEQ.....Output image name (seq. #). 0 => highest unique.
OUTDISK....Disk drive # of output image. 0 => highest disk
number with sufficient space.
BLC........Bottom right corner in input image of desired
subimage. Default is entire image.
TRC........Top right corner in input image of desired
subimage. Default is entire image.
OPCODE.....User specified operation code:
'NINE' => forms a weighted sum for each data
point. The result is a function of
the input data point and the eight
surrounding data points.
| DATA(H-1) DATA(H) DATA(H+1) |
so for | DATA(I-1) DATA(I) DATA(I+1) |
| DATA(J-1) DATA(J) DATA(J+1) |
(a 3x3 sub-window in the input image)
C = CPARM
and RESULT(I) = C(1)*DATA(H-1) +
C(2)*DATA(H)
+ C(3)*DATA(H+1) +
C(4)*DATA(I-1) + ...
+ C(9)*DATA(J+1) +
DPARM(1)*DATA(I).
In addition, all indefinite values in
the input image are not used in
computing the result.
Built-in gradient masks. The first 8 "coordinate"
masks, assuming the image has North to the top and East
to the left, produce positive values when traversing
from the coordinate (e.g. North to South) when the image
values are increasing. If the image is not in the
usual configuration, the "coordinate" names are
misleading. The matrices are applied as stated but the
third row of the matrices applies to a higher numbered
image row than the second matrix row than the first
matrix row.
'NORT' =>
| 1 1 1 |
| 1 -2 1 |
| -1 -1 -1 |
'NE' =>
| 1 1 1 |
| -1 -2 1 |
| -1 -1 1 |
'EAST' =>
| -1 1 1 |
| -1 -2 1 |
| -1 1 1 |
'SE' =>
| -1 -1 1 |
| -1 -2 1 |
| 1 1 1 |
'SOUT' =>
| -1 -1 -1 |
| 1 -2 1 |
| 1 1 1 |
'SW' =>
| 1 -1 -1 |
| 1 -2 -1 |
| 1 1 1 |
'WEST' =>
| 1 1 -1 |
| 1 -2 -1 |
| 1 1 -1 |
'NW' =>
| 1 1 1 |
| 1 -2 -1 |
| 1 -1 -1 |
'MSK1' =>
| 0 -1 0 |
| -1 4 -1 |
| 0 -1 0 |
'MSK2' =>
| -1 -1 -1 |
| -1 8 -1 |
| -1 -1 -1 |
'MSK3' =>
| 1 -2 1 |
| -2 4 -2 |
| 1 -2 1 |
Edge enhancement operators:
'SOBL' => performs the 'Sobel' edge enhancement
operation on each data point. The
operation is defined by
RESULT(I) = SQRT(X**2 + Y**2) +
DPARM(1)*DATA(I).
| DATA(H-1) DATA(H) DATA(H+1) |
for | DATA(I-1) DATA(I) DATA(I+1) |
| DATA(J-1) DATA(J) DATA(J+1) |
(a 3x3 sub-window in the input image)
X=(DATA(H+1)+2*DATA(I+1)+DATA(J+1))
-(DATA(H-1)+2*DATA(I-1)+DATA(J-1))
Y=(DATA(H-1)+2*DATA(H)+DATA(H+1))-
(DATA(J-1)+2*DATA(J)+DATA(J+1))
(default).
'KRSH' => performs the 'Kirsch' edge enhancement
operation on each data point. The
operation is defined by
RESULT(I) = max (abs (5*S(i) - 3*T(i)))
as i runs from 1 to 8
| DATA(1) DATA(2) DATA(3) |
for | DATA(8) DATA(9) DATA(4) |
| DATA(7) DATA(6) DATA(5) |
(a 3x3 sub-window in the input image)
S(i)=DATA(i) + DATA(i+1) + DATA(i+2)
T(i)=DATA(i+3) + DATA(i+4) + DATA(i+5)
+ DATA(i+6) + DATA(i+7)
(the subscripts are evaluated mod 8)
'WALL' => performs the 'Wallis' edge enhancement
operation on each data point. The
operation is defined as follows:
| DATA(H-1) DATA(H) DATA(H+1) |
for | DATA(I-1) DATA(I) DATA(I+1) |
| DATA(J-1) DATA(J) DATA(J+1) |
RESULT(I)=0.25*log((DATA(I)**4)/
(DATA(H)*DATA(I+1)*DATA(J)
*DATA(I-1)))
CPARM......User specified array. If OPCODE is 'NINE' CPARM(J)
is the weight of the J'th element in the area
operator function. Otherwise, the array is fixed.
(Also see OPCODE above)
DPARM......User specified array. DPARM(1) is the weight of the
input image in the computation of the output image.
DPARM(2) specifies whether the row numbers should
be output as the task is running (-1=> no,otherwise
yes).
(Also see OPCODE above)
EXPLAIN SECTION
NINER: Task which applies various 3x3 filter operators to
images.
DOCUMENTOR: Thad A. Polk/Don Wells NRAO.
RELATED PROGRAMS: All AIPS image tasks.
PURPOSE
NINER is designed to apply 3x3 filters to images. It uses
the 'scrolling buffer' concept with space for a 3-row buffer.
It provides a framework which allows the implementation of any
operator which depends only on the nine pixels of the 3x3
matrix surrounding and including a given pixel position. NINER
can handle up to 7 dimensional images in either integer or real
format and supports blanking. A subimage of the input image
may be selected. The necessary control information can be
passed to the program via OPCODE, CPARM, and DPARM.
DETAILS ABOUT SPECIFIC OPCODES
NINE: implements a simple 3x3 convolution. There is one
peculiarity: if the convolving kernel has a non-zero
sum, then blank pixels in the input are skipped and
the sum of the weights is renormalized. But if the
kernel has a sum of zero, then a blank anywhere in
the 3x3 area will cause the output value to be blank.
NORT, NE, EAST, SE SOUT, SW, WEST, NW:
these are special cases of NINE. The kernels are
arranged so that they are directional derivative
filters. The output picture resembles a landscape
viewed from above with illumination at a glancing
angle from some direction. Note that the coordinate
labels assume that the image is oriented with the
North at the top and East at the left. With the
illumination from the north, for example, the north
side of a peak will be bright (positive) and the
south side will be dark (negative).
MSK1, MSK2, MSK3:
these are also special cases of NINE. The kernels are
arranged so that they emphasize point sources.
SOBL: This is the "Sobel" operator as described in the
enhancement chapter of Pratt's "Digital Image
Processing". It is a generalized gradient filter.
It computes the square root of the sum of the squares
of the directional derivatives in two orthogonal
directions. Therefore, its output is >=0 everywhere.
Bright regions in the output are places where the
intensity "slope" of the image is large, regardless
of the direction of the slope. This means that SOBL
is sensitive to edges of all kinds in the image.
Point sources tend to produce doughnuts. Lines
(e.g., jets) tend to produce parallel ridges. Edges
of regions tend to produce ridges which mark the
loci of maximum gradient of the edges.
KRSH: This is the "Kirsch" operator also described in the
enhancement chapter of Pratt's "Digital Image
Processing". It too is a generalized gradient filter.
It computes the gradient in the eight possible
directions and returns as a result the largest value.
It produces results very similar to the Sobel
operator but due to the great amount of computation
involved it is relatively slow compared to the other
operators.
WALL: This is the "Wallis" operator which also appears in
Pratt's book. It computes the base ten log of the
normalized quotient of the center pixel over the
product of the four adjacent pixels at each data point.
It is sensitive to point sources in images.