2. SciLab Basics
For the rest of the semester, I’d probably be using a couple of essential tools on my journey to learning image processing. One brilliant software I encountered is SciLab, an high-level cross-platform programming language very efficient for numerical computations and scientific visualizations. Many researchers choose SciLab for its vast capabilities on signal processing and image enhancement. Best of all, unlike other software, SciLab is non-proprietary and completely open-source. The product is in the public domain – freely downloadable online. Anyone can run, copy, modify and redistribute its packages. For the download location, click here.
SciLab offers a good Integrated Development Environment (IDE) for the user for working with codes and figures. The following is a screenshot I have captured from my own desktop.
The tool offers a console for easy preview of short one-liner codes, and an embedded test editor, called SciPad, for working with files.
My primary operating system is Linux (specializing in GNU-based applications). Currently I am using the Ubuntu distribution. For installing SciLab in Ubuntu, one can open the package list at:
System > Administration > Synaptic Package Manager
then mark SciLab* for installation.
Alternatively, simply open the terminal and enter (as root):
sudo apt-get install scilab
The image processing end of the software is referred as the SciLab Image and Video Processing Toolbox (SIVP), an equivalent of the SIP in Windows. To install this extension, run:
sudo apt-get install sivp
This tool can be loaded from the SciLab console via:
Toolboxes > sivp
*Latest stable version as of article date: SciLab 5.2.1-8, compatible with SIVP 0.5.0-1.
For a good jumpstart, I used SciLab scripts to familiarize with the basic functionalities (and workarounds) of the imaging tool. On a 2D canvass, I constructed basic shapes using binary matrices. The initial scipt  reads:
nx = 500; ny = 500; // defines the number of elements along x and y x = linspace(-1, 1, nx); //defines the range y = linspace(-1, 1, ny); [X, Y] = ndgrid(x, y); // creates two 2-D arrays of x and y coordinates A = zeros(nx, ny);
This basically prepares a 500×500 matrix filled with zeroes (ready to be filled with data later). The script to create a circle will be:
r = sqrt(X.^2 + Y.^2); // element-per-element squaring of X and Y A (find((r<0.7))) = 1; // values of r where r<0.7
Modifying this code creates an annulus:
A (find((r < 0.7) & (r > 0.4))) = 1; // values of r where 0.4<r<0.7
To view the figure, insert:
imshow(A); // displays the 2D matrix A
Load the program into the console via:
Execute > Load into SciLab
or simply, Ctrl+L. Figure 2A shows the output figure of the set of code.
In order to produce the square image (Figure 2B), the script would be:
A (find((abs(X) < 0.5) & (abs(Y) < 0.5))) = 1; // values of x and y from -0.5 to 0.5
where abs() is a built-in function for taking absolute values.
Next up, would be to create a set of horizontal gratings, which can be created using loops:
for i=1:1:500 for j=1:100:500 // 100 being the period for how the gratings repeat A(j:j+50, i) = 1; // 50 being the width of every grating end end
This script, when displayed, results to a fairly striped image (Figure 3A).
Diverting from binary matrices, a smooth 2D sinusoidal function is created by:
freqc = 5*%pi; // frequency of the sinusoidal A = sin(X*freqc);
Lastly, to produce a 2D Gaussian distribution (Figure 4), we write:
r = sqrt(X.^2 + Y.^2); // note element-per-element squaring of X and Y A = exp(-4*r); // 2D Gaussian
Saving the image into a file takes the one-liner:
imwrite(A, 'gaussian.bmp'); // also works with png, jpg, tif and gif
That wraps up my initial set of familiarization on SciLab. This just marks the beginning of an exciting bunch of image processing ahead. One final note, I believe it is always best to develop good coding habits. For SciLab coding standards, let me share the Code Conventions for the SciLab Programming Language.
For this section, I would rate myself 10 for being able to comprehend the important ideas and produce the desired outputs.
 Soriano, M. (2010). A2 – Scilab Basics. Applied Physics 186.