Image segementation of cement paste complex structure!
Ältere Kommentare anzeigen
Dear all,
I have a cement paste gray image of the CT, now I want to do some quantative analysis of the porosity and the microstructure characterization. From the image we at least can get 4 main composition, how can I use the histogram or threshold to finely distinguish different parts in this image? Can anybody help me with the Matlab programming? I tried the standard segmentation but it doesn´t work so well since the boundary of cement material is almost invisible. Thank you so much for your help.

Joanna
2 Kommentare
Maria Huguett
am 5 Apr. 2019
Could you tell me please, where can I find the "Sean's intensity thresholding method"? I would like to try it, since I need a method to segmentate pores, grains and paraffin of my sediment sample, to get porosity values. Thanks!
Image Analyst
am 6 Apr. 2019
Maria, it's in Sean's answer below. Click here to scroll down to it.
Akzeptierte Antwort
Weitere Antworten (1)
Sean de Wolski
am 9 Dez. 2013
Bearbeitet: Sean de Wolski
am 9 Dez. 2013
There are a few things a little weird about your image:
- First, for a CT image, I'd expect the background to have a lower intensity than everything else since this is void space (unless is was scanned in a liquid of some kind). What do you know about the setup of the system and do you have control over it?
- Second, it appears the histogram has already been modified in some way. I would expect this to be fairly bimodal for an object in the forground.

As far as identifying the cement matrix, here's a rough first pass to get you started:
I = imread('cct.jpg');
mask of the concrete part
disk = getnhood(strel('disk',4)); %disk
Istd = stdfilt(I,disk); %std filter tor emove backgoryund
Mcyl = Istd>2;
C = (conv2(double(I),double(disk),'same'));
levels = multithresh(C,2); %otsu thresholding
L = imquantize(C,levels); %apply thresholds
L = L+1; %increment
L(~Mcyl) = 0; %remove background
%%visualize
cmap = [1 1 1;lines(3)]; % colormap
Lrgb = label2rgb(L,cmap); % to view
% view it
imshow(Lrgb);
colormap(cmap);
hCb = colorbar;
set(hCb,'YTick',0:3);
set(hCb,'YTickLabel',{'Background','Porous','Cement Matrix','Aggregate'});

7 Kommentare
xsfeng
am 9 Dez. 2013
xsfeng
am 9 Dez. 2013
Sean de Wolski
am 9 Dez. 2013
Hi Joanna,
I would highly recommend starting with the 16bit image. Can you post it? I would guess a lot of this information was lost with the conversion to 8 bits and to jpeg.
I would do this before trying anything more complex or working on a more general algorithm.
ps. My MS thesis was on CT scanning and calculations with CT images :)
xsfeng
am 9 Dez. 2013
xsfeng
am 4 Mär. 2015
Sean de Wolski
am 5 Mär. 2015
A morphological opening ( imopen) with a small structuring element should do it. Alternatively, you could create a mask of the pores and then use imfill(pores,'holes') to fill in all of the holes inside a pore.
Image Analyst
am 5 Mär. 2015
To get rid of holes in blobs smaller than a certain amount, say 500 pixels, I use bwareaopen
binaryImage = ~bwareaopen(~binaryImage, 500);
Kategorien
Mehr zu Image Processing Toolbox finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!