Image processing for crater detection

Can anyone help me with the code for the crater detection of the image

5 Comments

What techniques have you tried? We can help with implementation into MATLAB, but you should have an idea of the algorithm you wish to implement.
Hai Sir,
First of all let me thank you for considering my query into account. Since I am new to MATLAB, iam struggling with this paper. The algorithm is as follows:
CRATERS DETECTION ALGORITHM
This reliable topography-based Craters Detection Algorithm that we have proposed here mainly based on real image (optical image) analysis and morphological image analysis. There are sequence stages of the codes in order to get a satisfaction result by assuming that the sun elevation angle to be known. The algorithm flowchart can be comprised as figure (1) below. To reduce the complex analysis on image detection, the author analyzed a 2-D optical image. The threshold for the image is set using intelligent approach from Sawabe, Natsunaga and Rokugawa in classification of images as can be shown in equations below.
Rmin< Rm - E
Rmax> Rm + E
Pmin < Pmax
E= Sigma
By using this approach, images were classified into two components that are light and dark patches or obviously known as ‘sunny and shady patches’ with a regard of known sun direction or sun vector. Ideally, these two groups of patches are easily recognizable if image was taken under low sun elevation. These patterns of light and dark patches were detected when all these equations are satisfied :
Rmin< Rm - E
Rmax> Rm + E
Pmin < Pmax
E= Sigma
where Rmin indicates the minimum pixel value, Rmax indicates the maximum pixel value, Rm indicates the average pixel value and E indicates the standard deviation in the small area including the target patches. Pmin and Pmax indicate the positions at the minimum and maximum value pixels from the direction of the sun radiation or sun vector . To classify and consider it as a crater, two ways of
detection are proposed which is minimum distance
measurement and angle detection based on known sun vector. In distance measurement, the minimum distance between each of the centroids calculated previously is determined using this formula:
|Distance| = √[(x2-x1)2 + (y2-y1)2] = |r|
Where |Distance| is the measurement of the distance between two pairing patches (light and dark), x2,x1 are the x-component of the centroids and y2,y1 are the centroid’s component of the y-axis respectively. In angle determination, there will be an input for sun vector which is known by looking at the sunrays effect at those craters (the position of the light and dark patches). This algorithm will then compute each of the angles of every pairing patch with their minimum distances using scalar product or dot product in vector analysis which is:
r . s = |r| |s| cos θ
where r = vector of each pairing blobs
s = sun vector
|r| = distance/length of each pairing blobs
|s| = distance of sun vector = unit vector = 1
θ = angle between sun vector and vector of
each pairing blobs.
Each of pairing patches angle is calculated using above equation and those who has minimum angle with regards to the sun vector and has a minimum distance calculated previously will be considered and stored in a crater list.
Oppositely, those who are against the direction and have the maximum angles with regards to the sun vector will be scrapped and considered as noise.
The flow chart of the algorithm is:
http://img513.imageshack.us/img513/5008/algm.png
This seems like an interesting problem. I suppose, for the thresholding, the way they calculate the limits Rm, Rmin and Rmax needs to be known. If this is known, the resulting image can be written as easily as:
I = imread('lunar1.png');
For the rgb to hsv conversion (though I don't really see the point doing this), http://www.mathworks.com/help/techdoc/ref/rgb2hsv.html can be used on I.
I = rgb2hsv(I);
I would rather do
I = rgb2gray(I); %So that thresholding in 1 image layer is easier, unless multiband thresholding is what you want.
For the thresholding, something like:
J = (I > Rmin & I < Rmax); %To extract the parts of the image that's needed.
Alternatively, threshold at somewhere suitable so that:
K = (J > Rmed); %where Rmed is between Rmin and Rmax.
now with K, all the morphological operations can be done, since K is already a logical matrix.
You could use imdilate, imerode, with suitable SE, created using strel.
The distance and angle representation seems a bit more complicated, and I would not want to delve into that unless I know more about how it really works.
Hope this helps!
Thank you Amith....
can i know how can we do morphological image analysis here ????

Sign in to comment.

Answers (1)

Ashish Uthama
Ashish Uthama on 17 Sep 2012
"This seems like an interesting problem. I suppose, for the thresholding, the way they calculate the limits Rm, Rmin and Rmax needs to be known. If this is known, the resulting image can be written as easily as:
I = imread('lunar1.png');
For the rgb to hsv conversion (though I don't really see the point doing this), http://www.mathworks.com/help/techdoc/ref/rgb2hsv.html can be used on I.
I = rgb2hsv(I);
I would rather do
I = rgb2gray(I); %So that thresholding in 1 image layer is easier, unless multiband thresholding is what you want.
For the thresholding, something like:
J = (I > Rmin & I < Rmax); %To extract the parts of the image that's needed.
Alternatively, threshold at somewhere suitable so that:
K = (J > Rmed); %where Rmed is between Rmin and Rmax.
now with K, all the morphological operations can be done, since K is already a logical matrix.
You could use imdilate, imerode, with suitable SE, created using strel.
The distance and angle representation seems a bit more complicated, and I would not want to delve into that unless I know more about how it really works.
Hope this helps! "

Asked:

on 27 Oct 2011

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!