For this we need to first understand the bmp file format
As illustrated by the figure below:
The bitmap image consists of 3 main parts:
1) Header ( Including the signature and the image info data)
2) Colour Profile
3) Image data
Image source: http://en.wikipedia.org/wiki/BMP_file_format
The header data is of size 54 bits. This can be observed by adding up the size requirements of the individual entries as written below. Also mentioned is the offset value for individual entries. An interesting observation is that the total size is not a multiple of 4 which might create several problems as in most compilers memory is read in chunks of 4 bytes.
offset size description
0     2      signature, must be 4D42 hex
2     4       size of BMP file in bytes (not very reliable)
6     2       reserved, must be zero
8     2       reserved, must be zero
10    4       offset to start of image data in bytes
14    4       size of BITMAPINFOHEADER structure, must be 40
18    4       image width in pixels
22   4       image height in pixels
26   2       number of planes in the image, must be 1
28   2       number of bits per pixel (1, 4, 8, or 24)
30   4       compression type (0=none, 1=Run Length Encoding (RLE)-8, 2=RLE-4)
34   4       size of image data in bytes (including padding, to make it a multiple of 4)
38   4       horizontal resolution in pixels per meter
42   4       vertical resolution in pixels per meter
46   4       number of colours in image, or zero
50   4       number of important colours, or zero
(To be continued in next post)
Collection of writings related to technology, programming, solutions to common problems and a lot more :)
Sunday, January 30, 2011
Friday, January 21, 2011
Increasing RAM using a USB drive
A disk cache component called ReadyBoost has been introduced by Microsoft in its two latest offerings Windows Vista and also Windows 7.
Although it is best to physical add new RAM to your system, it is possible to improve the performance by using an external hard drive by about 5-10% using flash memory, a USB flash drive, SD card, CompactFlash or any kind of portable flash mass storage system as a cache.
How to enable Ready Boost in your external disk:
1)Go to My Computer
2)Right click on your device
3)Select Properties
4)Click on the ReadyBoost tab
5)You can select various options/space allotment from there.
How to enable/disable Ready Boost in your system:
1)Go to the Control Panel menu option.
2)Click on Performance Information and Tools
3)Click on Advanced Tools in the left hand navigation bar.
4)Click on Configure my Windows ReadyBoost device
5) Select the options you want.
You can even check the performance imporvement by :
1) Go to Control Panel menu option. Change to classic view options
2) Click on the Administrative Tools icon.
3) Click on Reliability and Performance Monitor icon.
Under the monitoring tools category, click on performance monitor
Although it is best to physical add new RAM to your system, it is possible to improve the performance by using an external hard drive by about 5-10% using flash memory, a USB flash drive, SD card, CompactFlash or any kind of portable flash mass storage system as a cache.
How to enable Ready Boost in your external disk:
1)Go to My Computer
2)Right click on your device
3)Select Properties
4)Click on the ReadyBoost tab
5)You can select various options/space allotment from there.
How to enable/disable Ready Boost in your system:
1)Go to the Control Panel menu option.
2)Click on Performance Information and Tools
3)Click on Advanced Tools in the left hand navigation bar.
4)Click on Configure my Windows ReadyBoost device
5) Select the options you want.
You can even check the performance imporvement by :
1) Go to Control Panel menu option. Change to classic view options
2) Click on the Administrative Tools icon.
3) Click on Reliability and Performance Monitor icon.
Under the monitoring tools category, click on performance monitor
Thursday, January 20, 2011
Matlab-4 Display multiple images, plots in a single window in MATLAB
How to display multiple images or graphs in a single window (frame) in MATLAB
This is done by using the subplot command in MATLAB
Suppose we have to display 4 images (aa,bb,cc,dd) in a single figure and arrange them in 2x2 fashion.
We will use the following commands:
figure;
subplot(2,2,1);imshow(aa);
subplot(2,2,2);imshow(bb);
subplot(2,2,3);imshow(cc);
subplot(2,2,4);imshow(dd);
similary to display two image in 2x1 fashion, we will use:
subplot(2,1,1);imshow(aa);
subplot(2,1,2);imshow(bb);
This is done by using the subplot command in MATLAB
Suppose we have to display 4 images (aa,bb,cc,dd) in a single figure and arrange them in 2x2 fashion.
We will use the following commands:
figure;
subplot(2,2,1);imshow(aa);
subplot(2,2,2);imshow(bb);
subplot(2,2,3);imshow(cc);
subplot(2,2,4);imshow(dd);
similary to display two image in 2x1 fashion, we will use:
subplot(2,1,1);imshow(aa);
subplot(2,1,2);imshow(bb);
Labels:
imshow,
matlab basics,
subplot
Matlab Image Processing-3 Converting a RGB image to indexed image
We need to use the command rgb2ind to do this.
A conversion like
[X,map] = rgb2ind(aa, n) %% here aa is a rgb color image. n is an integer less than or equal to 65536.
By using this operation we can reduce a RGB having almost 256*256*256 possible colors into an index image X with colormap map having the colors of RGB image mapped to the nearest color values.
Further making changes into the colour map.
Suppose we need to change the total colours into say n.
We can do the following:
[X, map] = imread('image.jpg');
[Y, newmap] = imapprox(X, map, n); % n is the new number of colours (a positive int value)
imshow(Y, newmap);
Converting the Ind Image into Grayscale:
ind2gray removes the hue and saturation information from the input image while retaining the intensity portion(i.e the luminiscence).
grayim = ind2gray(X,map);
imshow(X,map);
figure, imshow(grayim);
A conversion like
[X,map] = rgb2ind(aa, n) %% here aa is a rgb color image. n is an integer less than or equal to 65536.
By using this operation we can reduce a RGB having almost 256*256*256 possible colors into an index image X with colormap map having the colors of RGB image mapped to the nearest color values.
Further making changes into the colour map.
Suppose we need to change the total colours into say n.
We can do the following:
[X, map] = imread('image.jpg');
[Y, newmap] = imapprox(X, map, n); % n is the new number of colours (a positive int value)
imshow(Y, newmap);
Converting the Ind Image into Grayscale:
ind2gray removes the hue and saturation information from the input image while retaining the intensity portion(i.e the luminiscence).
grayim = ind2gray(X,map);
imshow(X,map);
figure, imshow(grayim);
Matlab basics-2 : Format conversions in Matlab
Suppose we have an image
aa=imread("image.jpg");
Conversion to grayscale:
we can convert it to gray scale using the following operation
grayaa=rgb2gray(aa);
the matrix grayaa is the gray scale version of the image aa.
rgb2gray converts RGB values to grayscale values by forming a weighted sum of the R, G, and B components:
0.2989 * R + 0.5870 * G + 0.1140 * B
Converting the image into black and white:
It can be done in various ways depending on the threshold values.
bw1=im2bw(aa); %% Converts the image into bw using a default value
bw2=im2bw(aa,i); %%here i lies between 0 and 1. 'i' having a value of 0.3 means a threshold value of nearly 77 ( 0.3*256).
An important observation here is that the input image aa can be a grayscale image, an intensity image or even a RGB image.
If we give a RGB image as an input, MATLAB converts the RGB to grayscale first and then into black and white by itself.
aa=imread("image.jpg");
Conversion to grayscale:
we can convert it to gray scale using the following operation
grayaa=rgb2gray(aa);
the matrix grayaa is the gray scale version of the image aa.
rgb2gray converts RGB values to grayscale values by forming a weighted sum of the R, G, and B components:
0.2989 * R + 0.5870 * G + 0.1140 * B
Converting the image into black and white:
It can be done in various ways depending on the threshold values.
bw1=im2bw(aa); %% Converts the image into bw using a default value
bw2=im2bw(aa,i); %%here i lies between 0 and 1. 'i' having a value of 0.3 means a threshold value of nearly 77 ( 0.3*256).
An important observation here is that the input image aa can be a grayscale image, an intensity image or even a RGB image.
If we give a RGB image as an input, MATLAB converts the RGB to grayscale first and then into black and white by itself.
Matlab Basics 1 : How to read and display image
Reading an image
The simplest way to read an image is to store the image in the current directory (workspace) of Matlab and then use the function imread as follows:
im = imread('aa.bmp'); %% where aa.bmp is the name of the image
%% the image data has been stored in the variable 'im'
Most of the commonly used formats like jpg, bmp, png are accepted by the imread function.
Alternatively if the image is in a different directory one can use the imread function by specifying the total path of the image
for example:
im= imread('C:/Users/Admin/Desktop/aa.jpg'); %% reads from the folder admin
Displaying an image
The command to display images is as follows:
imshow(im); %% will show the image
The problem here would be that the image would replace the current open image (if any).
For this it is better to use :
figure, imshow(im); %% will open the image in a new window
Once can even name the window using int values to use them for various purposes of display and processing post the display. For example :
figure(5), imshow(im);
To operate several graphic commands (or plot commands) one can use the option 'hold'.
Default value of hold is set to the stage off. Enabling it to 'on' state enables it to hold the current plot and all axis properties so that subsequent graphing commands add to the existing graph.
An interesting graphing command :
Suppose you want to find the co ordinates of a particular point in an image using matlab.
you can use the command:
[x, y]=ginput(i); plot(x, y, '+r'); %% where i is to replaced with the figure number in this case, for the above example we used 5
and then click on the point on the respective image.
the co ordinates will be stored in the matrix [x y].
The simplest way to read an image is to store the image in the current directory (workspace) of Matlab and then use the function imread as follows:
im = imread('aa.bmp'); %% where aa.bmp is the name of the image
%% the image data has been stored in the variable 'im'
Most of the commonly used formats like jpg, bmp, png are accepted by the imread function.
Alternatively if the image is in a different directory one can use the imread function by specifying the total path of the image
for example:
im= imread('C:/Users/Admin/Desktop/aa.jpg'); %% reads from the folder admin
Displaying an image
The command to display images is as follows:
imshow(im); %% will show the image
The problem here would be that the image would replace the current open image (if any).
For this it is better to use :
figure, imshow(im); %% will open the image in a new window
Once can even name the window using int values to use them for various purposes of display and processing post the display. For example :
figure(5), imshow(im);
To operate several graphic commands (or plot commands) one can use the option 'hold'.
Default value of hold is set to the stage off. Enabling it to 'on' state enables it to hold the current plot and all axis properties so that subsequent graphing commands add to the existing graph.
An interesting graphing command :
Suppose you want to find the co ordinates of a particular point in an image using matlab.
you can use the command:
[x, y]=ginput(i); plot(x, y, '+r'); %% where i is to replaced with the figure number in this case, for the above example we used 5
and then click on the point on the respective image.
the co ordinates will be stored in the matrix [x y].
Labels:
computer vision,
image processing,
matlab
Loading images from a Camera or Video
If you would like to do real time video processing you can even integrate your cameras into OpenCV.
It is easy to load an image from a camera. Ensure that camera is properly connected and detected by your computer.
CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0
CvCapture* capture = cvCaptureFromAVI("infile.avi");
Incase there is only one camera, or to select any camera from multiple connecterd cameras, 0 can be replaced with -1.
The camera link is stored in the capture structure.
Alternatively, frames can also be processed from a video :
CvCapture* capture = cvCaptureFromAVI("filename.avi");
Retreiving the image frame from the link:
IplImage* img = 0; // Declare a new image pointer
if(!cvGrabFrame(capture)){ // capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
img=cvRetrieveFrame(capture); // retrieve the captured frame
Important Caution :
One must release the image source after using it ->
cvReleaseCapture(&capture); // releases the capture link
It is easy to load an image from a camera. Ensure that camera is properly connected and detected by your computer.
CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0
CvCapture* capture = cvCaptureFromAVI("infile.avi");
Incase there is only one camera, or to select any camera from multiple connecterd cameras, 0 can be replaced with -1.
The camera link is stored in the capture structure.
Alternatively, frames can also be processed from a video :
CvCapture* capture = cvCaptureFromAVI("filename.avi");
Retreiving the image frame from the link:
IplImage* img = 0; // Declare a new image pointer
if(!cvGrabFrame(capture)){ // capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
img=cvRetrieveFrame(capture); // retrieve the captured frame
Important Caution :
One must release the image source after using it ->
cvReleaseCapture(&capture); // releases the capture link
Labels:
image processing,
IP,
opencv,
video processing
Subscribe to:
Posts (Atom)
