PxConvolveImage

PxConvolveImage — performs matrix-based convolutions on images.

Syntax

PxConvolveImage (image, matrix)

		

Arguments

image

A PhImage, previously grey-scaled with a call to PxGreyImage.

matrix

Usually a 3 X 3 matrix, entered as an array of arrays in the format:

[[v1 v2 v3]
 [v4 v5 v6]
 [v7 v8 v9]]

Returns

A PhImage.

Description

This function is used to convolve images. It applies the matrix to every point of the image, allowing for such effects as edge enhancement and image sharpening.

Example

This example, ex_PxConvolveImage.g, is included in the product distribution.

#!/usr/cogent/bin/phgamma

/*
The following example demonstrates PxCopyImage(), PxGreyImage(),
and PxConvolveImage().  An image is loaded and converted to grey
scales. Then it is convolved for image sharpening, vertical and
horizontal edge enhancement, and laplace edge detection.
*/

PtInit(nil);
require_lisp("PhotonWidgets.lsp");

win = new(PtWindow);

// Load and display the image.
pic1 = PxLoadImage("taj.bmp");
lab1 = new(PtLabel);
lab1.label_type = Pt_IMAGE;
lab1.label_data = pic1;

// Copy the image and convert the colors to grey scales.
pic2 = PxCopyImage(pic1);
pic2 = PxGreyImage(pic2);
lab2 = new(PtLabel);
lab2.label_type = Pt_IMAGE;
lab2.label_data = pic2;
lab2.SetPos(300,0);

// Copy the grey_scaled image and convolve for image sharpening.
matrix = array(array(0,-1,0),
	       array(-1,5,-1),
	       array(0,-1,0));
pic3 = PxCopyImage(pic2);
pic3 = PxConvolveImage(pic3, matrix);
lab3 = new(PtLabel);
lab3.label_type = Pt_IMAGE;
lab3.label_data = pic3;
lab3.SetPos(600,0);

// Copy the grey_scaled image and convolve for vertical edge enhancement.
matrix = array(array(2,0,-2),
	       array(2,0,-2),
	       array(2,0,-2));
pic4 = PxCopyImage(pic2);
pic4 = PxConvolveImage(pic4, matrix);
lab4 = new(PtLabel);
lab4.label_type = Pt_IMAGE;
lab4.label_data = pic4;
lab4.SetPos(0,200);

// Copy the grey_scaled image and convolve for horizontal edge enhancement.
matrix = array(array(2,2,2),
	       array(0,0,0),
	       array(-2,-2,-2));
pic5 = PxCopyImage(pic2);
pic5 = PxConvolveImage(pic5, matrix);
lab5 = new(PtLabel);
lab5.label_type = Pt_IMAGE;
lab5.label_data = pic5;
lab5.SetPos(300,200);

// Copy the grey_scaled image and convolve for laplace edge detector.
matrix = array(array(1,1,1),
	       array(1,-8,1),
	       array(1,1,1));
pic6 = PxCopyImage(pic2);
pic6 = PxConvolveImage(pic6, matrix);
lab6 = new(PtLabel);
lab6.label_type = Pt_IMAGE;
lab6.label_data = pic6;
lab6.SetPos(600,200);

PtRealizeWidget(win);
PtMainLoop();

See Also

PxCopyImage, PxGreyImage, PxThresholdImage