Droplet size calculation of a spray image

16 visualizzazioni (ultimi 30 giorni)
Jason
Jason il 9 Feb 2023
Commentato: Image Analyst il 28 Set 2024
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 Commenti
Image Analyst
Image Analyst il 10 Feb 2023
This
jqimage=image(2000:2500,2000:2500);
does not work with the particle.jpg image you attached. It's not big enough.
Jason
Jason il 12 Feb 2023
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

Accedi per commentare.

Risposte (2)

prasanth s
prasanth s il 11 Feb 2023
Modificato: Image Analyst il 28 Set 2024
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 Commenti
Khai
Khai il 28 Set 2024
Modificato: Khai il 28 Set 2024
@Jason Could you please help me to provide full code. Thank you so much for your supprot
Image Analyst
Image Analyst il 28 Set 2024
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).

Accedi per commentare.


Image Analyst
Image Analyst il 12 Feb 2023
Try imbothat bottom hat filter.

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by