.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ImageRGB 3pm" .TH ImageRGB 3pm "2023-06-17" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" PDL::ImageRGB \-\- some utility functions for RGB image data handling .SH "DESCRIPTION" .IX Header "DESCRIPTION" Collection of a few commonly used routines involved in handling of \s-1RGB,\s0 palette and grayscale images. Not much more than a start. Should be a good place to exercise some of the broadcast/map/clump \s-1PP\s0 stuff. .PP Other stuff that should/could go here: .IP "\(bu" 3 color space conversion .IP "\(bu" 3 common image filters .IP "\(bu" 3 image rebinning .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use PDL::ImageRGB; .Ve .SH "FUNCTIONS" .IX Header "FUNCTIONS" .SS "cquant" .IX Subsection "cquant" quantize and reduce colours in 8\-bit images .PP .Vb 1 \& ($out, $lut) = cquant($image [,$ncols]); .Ve .PP This function does color reduction for <=8bit displays and accepts 8bit \s-1RGB\s0 and 8bit palette images. It does this through an interface to the ppm_quant routine from the pbmplus package that implements the median cut routine which intellegently selects the 'best' colors to represent your image on a <= 8bit display (based on the median cut algorithm). Optional args: \f(CW$ncols\fR sets the maximum nunmber of colours used for the output image (defaults to 256). There are images where a different color reduction scheme gives better results (it seems this is true for images containing large areas with very smoothly changing colours). .PP Returns a list containing the new palette image (type PDL_Byte) and the \s-1RGB\s0 colormap. .SS "interlrgb" .IX Subsection "interlrgb" Make an \s-1RGB\s0 image from a palette image and its lookup table. .PP .Vb 1 \& $rgb = $palette_im\->interlrgb($lut) .Ve .PP Input should be of an integer type and the lookup table (3,x,...). Will perform the lookup for any N\-dimensional input pdl (i.e. 0D, 1D, 2D, ...). Uses the index command but will not dataflow by default. If you want it to dataflow the dataflow_forward flag must be set in the \f(CW$lut\fR ndarray (you can do that by saying \&\f(CW$lut\fR\->\fBset_dataflow_f\fR\|(1)). .SS "rgbtogr" .IX Subsection "rgbtogr" Converts an \s-1RGB\s0 image to a grey scale using standard transform .PP .Vb 1 \& $gr = $rgb\->rgbtogr .Ve .PP Performs a conversion of an \s-1RGB\s0 input image (3,x,....) to a greyscale image (x,.....) using standard formula: .PP .Vb 1 \& Grey = 0.301 R + 0.586 G + 0.113 B .Ve .SS "bytescl" .IX Subsection "bytescl" Scales a pdl into a specified data range (default 0\-255) .PP .Vb 1 \& $scale = $im\->bytescl([$top]) .Ve .PP By default \f(CW$top\fR=255, otherwise you have to give the desired top value as an argument to \f(CW\*(C`bytescl\*(C'\fR. Normally \f(CW\*(C`bytescl\*(C'\fR doesn't rescale data that fits already in the bounds 0..$top (it only does the type conversion if required). If you want to force it to rescale so that the max of the output is at \f(CW$top\fR and the min at 0 you give a negative \f(CW$top\fR value to indicate this. .SH "BUGS" .IX Header "BUGS" This package doesn't yet contain enough useful functions! .SH "AUTHOR" .IX Header "AUTHOR" Copyright 1997 Christian Soeller All rights reserved. There is no warranty. You are allowed to redistribute this software / documentation under certain conditions. For details, see the file \s-1COPYING\s0 in the \s-1PDL\s0 distribution. If this file is separated from the \s-1PDL\s0 distribution, the copyright notice should be included in the file.