Droplet size calculation of a spray image

조회 수: 16 (최근 30일)
Jason
Jason 2023년 2월 9일
댓글: Image Analyst 2024년 9월 28일
Hi predecessors,
I have this kind of spray image and I want to calculate the droplet size and distribution of the particles, and wondering if there is a way to do that on MATLAB so that I can learn from it. Thanks!
Here are what I do now, I really appreciate you can help to point out the errors or mistakes,and if you are me, what code will you use to realize this function.
clc
clear all;
image=imread('E:\picture_test\heitu.tiff');
jqimage=image(2000:2500,2000:2500);
imshow(jqimage,[0 4000]);title('jiequ');
[gradthresh,numofiter]=imdiffuseest(jqimage);
diffusedImage=double(imdiffusefilt(jqimage,'GradientThresh',gradthresh,'NumberOfIterations',numofiter));
imshow(diffusedImage,[0 4000]);
[testx,testy]=size(diffusedImage);
array_x=zeros(501,501);
blank_x=zeros(501,501);
y=zeros(1,501);
for i=1:testx
testx_temp=diffusedImage(i,:);
for i1=2:testy-1
y(i1)=abs((testx_temp(i1+1)-testx_temp(i1-1))/2);
end
array_x(i,:)=y;
[pks,locs]=findpeaks(array_x(i,:),"MinPeakHeight",40);
blank_x_i=blank_x(i,:);
for i2=1:length(locs);
blank_x_i(locs(i2))=1;
end
blank_x(i,:)= blank_x_i;
end
array_y=zeros(501,501);
blank_y=zeros(501,501);
x=zeros(501,1);
for i=1:testy
testx_temp=diffusedImage(:,i);
for i1=2:testx-1
x(i1)=abs((testx_temp(i1+1)-testx_temp(i1-1))/2);
end
array_y(:,i)=x;
[pks,locs]=findpeaks(array_y(:,i),"MinPeakHeight",40);
blank_y_i=blank_y(:,i);
for i2=1:length(locs);
blank_y_i(locs(i2))=1;
end
blank_y(:,i)= blank_y_i;
end
figure;
imagesc(blank_x);
hold on;
imagesc(blank_y);
add_ab=blank_x+blank_y;
imagesc(add_ab);
figure;
binaryimage=im2bw(add_ab);
imshow(binaryimage);
binaryimage=imfill(binaryimage,'holes');
imshow(binaryimage);title('binaryimage');
figure
labeledimage=bwlabel(binaryimage,8);
imshow(labeledimage);
coloredlabels=label2rgb(labeledimage,'hsv','k','shuffle');
hold on;
imshow(coloredlabels);
blobmeasurements=regionprops(labeledimage,add_ab,'all');
numberofblobs=size(blobmeasurements,1);
boundaries=bwboundaries(binaryimage);
numberofboundaries=size(boundaries,1);
for k1=1:numberofboundaries
thisboundary=boundaries{k1};
plot(thisboundary(:,2),thisboundary(:,1),'g','LineWidth',2);
end
for k2=1:numberofblobs
blobarea=blobmeasurements(k2).Area;
blobecd(k2)=sqrt(4*blobarea/pi);
fprintf('%d\n',blobecd(k2))
end
  댓글 수: 2
Image Analyst
Image Analyst 2023년 2월 10일
This
jqimage=image(2000:2500,2000:2500);
does not work with the particle.jpg image you attached. It's not big enough.
Jason
Jason 2023년 2월 12일
Thanks professor, I know this problem, now it is only for testing.Could you please help write a program that can implement this function?it may be better to learn.Thanks a lot

댓글을 달려면 로그인하십시오.

답변 (2개)

prasanth s
prasanth s 2023년 2월 11일
편집: Image Analyst 2024년 9월 28일
Use 'kmeans' for segmentation and 'regionprops' to get properties of particles,
image=imread('particle.jpg');
jqimage=rgb2gray(image);
[idx,C]=kmeans(jqimage(:),5);
Warning: Failed to converge in 100 iterations.
c_image=reshape(idx,size(jqimage));
droplets=c_image==1;
imshow(droplets);
stats=regionprops(droplets);
average_area=mean([stats.Area])
average_area = 3.1781
[edit: attached image and ran the code]
  댓글 수: 3
Khai
Khai 2024년 9월 28일
편집: Khai 2024년 9월 28일
@Jason Could you please help me to provide full code. Thank you so much for your supprot
Image Analyst
Image Analyst 2024년 9월 28일
kmeans is not the best function to use here. It is basically going to threshold the image into 5 different brightness ranges. In fact class/range 1, which he uses to form the segmented image, is unknown - class 1 may refer to different intensity ranges and hence different particles every time (will not necessarily always be the darkest particles).

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2023년 2월 12일
Try imbothat bottom hat filter.

카테고리

Help CenterFile Exchange에서 Image Segmentation and Analysis에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by