Image segementation of cement paste complex structure!
이전 댓글 표시
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
Maria Huguett
2019년 4월 5일
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
2019년 4월 6일
Maria, it's in Sean's answer below. Click here to scroll down to it.
채택된 답변
추가 답변 (1개)
Sean de Wolski
2013년 12월 9일
편집: Sean de Wolski
2013년 12월 9일
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
xsfeng
2013년 12월 9일
xsfeng
2013년 12월 9일
Sean de Wolski
2013년 12월 9일
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
2013년 12월 9일
xsfeng
2015년 3월 4일
Sean de Wolski
2015년 3월 5일
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
2015년 3월 5일
To get rid of holes in blobs smaller than a certain amount, say 500 pixels, I use bwareaopen
binaryImage = ~bwareaopen(~binaryImage, 500);
카테고리
도움말 센터 및 File Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!