フィルターのクリア

Extracting Cracks

7 ビュー (過去 30 日間)
Ratna
Ratna 2011 年 11 月 7 日
Hi,
I am working on an image which has pores and cracks. I was able to extract the pores excluding the cracks. Now I have to extract only the cracks. Is there any way to do this, that is to extract only cracks.
Below are the two images - 1st is the original image and second is the image which has only pores.
Below is the link for the image which has cracks rounded with brown color.
  6 件のコメント
Ashish Uthama
Ashish Uthama 2011 年 11 月 7 日
I can barely even see them at this resolution. What are these images? Can you improve the contrast/acquisition quality?
Ratna
Ratna 2011 年 11 月 7 日
@Ashish: These are CT images of plaster of size 512 x 512. I can't improve the acquisition because this is the best image we could get from CT scan. If I increase the contrast, I am getting unwanted/ unreal pores, making my image more blur.

サインインしてコメントする。

採用された回答

Sven
Sven 2011 年 11 月 7 日
Hi Ratna, It's quite difficult due to the relative intensities - cracks are only a "little" bit lighter than solid material. Here's my solution, which utilises Dirk Kroon's Frangi Vessel Filter on the FEX.
Sorry, I'm in a rush so I don't have time to comment it, but it's relatively short - hopefully you can follow line-by-line.
I've needed to put some pretty specific thresholds. I have no idea how it will work with "similar but different" images.
I = imread('Original_crackes.jpg');
Im = rgb2gray(I(130:700,450:1000,:)); % Clear away the border
Im_limited = double(min(max(200,Im),255));
Im_closed = imclose(Im_limited, ones(8));
Im_diff = Im_closed - Im_limited;
BW_holes = imopen(Im_limited<205,ones(4));
BW_pores = imclearborder(BW_holes);
Im_diff(imdilate(BW_holes,ones(10))) = 0;
% Get vessels
[Im_edgeEnhanced,Scale,Direction] = FrangiFilter2D(Im_diff/max(Im_diff(:)),struct('BlackWhite',false));
BW_cracks = bwareaopen(Scale==2, 50) & ~imdilate(BW_holes,ones(10));
CC = bwconncomp(BW_cracks);
stats = regionprops(CC, Im_edgeEnhanced,'Eccentricity','MaxIntensity','Orientation')
keepMask = [stats.Eccentricity]>0.983;
BW_cracks(cat(1,CC.PixelIdxList{~keepMask})) = false;
% Display
figure
subplot(1,3,1), imagesc(Im_limited), axis image
subplot(1,3,2), imagesc(BW_pores), axis image
subplot(1,3,3), imagesc(BW_cracks), axis image
  3 件のコメント
Walter Roberson
Walter Roberson 2011 年 11 月 8 日
The rgb2gray() is not what is clearing the boarder: it is the array indexing. If your image is already in grayscale and already does not have the boarder, then change the series of lines to something like
[I, cmap] = imread('Original_crackes.IMA');
Im = rgb2gray(ind2rgb(I, cmap));
I am guessing here that IMA images are pseudo-color images.
Sven
Sven 2011 年 11 月 9 日
Yes, the initial setup (loading the image, converting to grayscale, etc) is tailored to the sample .jpg file that you uploaded.
Since your true image is from from a different source, you will need to adjust those first lines as Walter points out.
Keep in mind that some of the constants that I've used: - Image limits of 200 -> 255 - "Hole" threshold of 205 - Various sizes for opening/closing/dilating (specified using "ones(x)") These were also tailored specifically to the image I had at hand. If your true image is different (ie, it actually uses CT Houndsfield units for intensity rather than the 1-255 that a .jpg conversion gives), then you may need to adjust those constants.
If in your original image the large circle is covered by approximately 512-by-512 pixels (which is the size of most full CT images), then this matches quite well with the image size that I wrote the answer for, and the dilation sizes I used should remain about right. You're still welcome to tinker with them to see if it improves the output.

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2011 年 11 月 9 日
Another option worth trying is anisotropic diffusion http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/#anisodiff or coherence enhancing anisotropic diffusion filters, like is often used for fingerprints: http://www.vavlab.ee.boun.edu.tr/courses/574/materialx/PDEs%20in%20ImageProcessing/weickert_coherenceenhancing.pdf
Good luck.

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by