Droplet size calculation of a spray image
17 次查看(过去 30 天)
显示 更早的评论
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
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.
回答(2 个)
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);
c_image=reshape(idx,size(jqimage));
droplets=c_image==1;
imshow(droplets);
stats=regionprops(droplets);
average_area=mean([stats.Area])
[edit: attached image and ran the code]
3 个评论
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).
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Segmentation and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!