Регистрация: 15.04.2016
Сообщений: 7
|
Image processing toolbox matlab задать для обработки сразу несколько картинок
Вопрос, как данный код загнать под обработку нескольких ихображений последовательно? например выбирать сразу 100 изображений, производить вычисления и заносить результат в ячейки таблицы? На изображениях происходит поиск окружности и вычисление ее радиуса и объема
Код:
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[FileName, PathName]=uigetfile('*.bmp; *.jpg; *.gif', 'Open File'); %считываем изображение
if FileName~=0
rgb=imread(strcat(PathName, FileName));
I=rgb2gray(rgb);
I=imcrop(I, [320 60 900 900]);
imshow(I);
text(732,501,'…',...
'FontSize',7,'HorizontalAlignment','right')
hy=fspecial('sobel');
hx=hy';
Iy=imfilter(double(I), hy, 'replicate');
Ix=imfilter(double(I), hx, 'replicate');
gradmag=sqrt(Ix.^2+Iy.^2);
L=watershed(gradmag);
Lrgb=label2rgb(L);
se=strel('disk', 20);
Io=imopen(I, se);
Ie=imerode(I, se);
Iobr=imreconstruct(Ie, I);
Ioc=imclose(Io, se);
Iobrd=imdilate(Iobr, se);
Iobrcbr=imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr=imcomplement(Iobrcbr);
fgm=imregionalmax(Iobrcbr);
I2=I;
I2(fgm)=255;
se2=strel(ones(5, 5));
fgm2=imclose(fgm, se2);
fgm3=imerode(fgm2, se2);
fgm4=bwareaopen(fgm3, 20);
I3=I;
I3(fgm4)=255;
bw=im2bw(Iobrcbr, graythresh(Iobrcbr));
D=bwdist(bw);
DL=watershed(D);
bgm=DL==0;
gradmag2=imimposemin(gradmag, bgm | fgm4);
L=watershed(gradmag2);
I4=I;
I4(imdilate(L==0, ones(3, 3))|bgm|fgm4)=255;
Lrgb=label2rgb(L, 'jet', 'w', 'shuffle');
grayimg = rgb2gray(Lrgb);
grayimg = imadjust(grayimg);
binar=im2bw(grayimg, 0.5)
binar=~binar
se = strel('disk',1);
bin = imopen(binar,se);
[B,L] = bwboundaries(bin);
stats = regionprops(L,'Centroid','EquivDiameter');
imshow(binar)
hold on
for k = 1:length(B)
boundary = B{k};
radius = stats(k).EquivDiameter/2;
xc = stats(k).Centroid(1);
yc = stats(k).Centroid(2);
theta = 0:0.01:2*pi;
Xfit = radius*cos(theta) + xc;
Yfit = radius*sin(theta) + yc;
plot(Xfit, Yfit, 'g');
text(boundary(1,2)-15,boundary(1,1)+15, num2str(radius,3),'Color','r',...
'FontSize',8);
set(handles.text2, 'string', num2str(radius));
vol=4*pi*radius*radius*radius/3;
set(handles.text7, 'string', num2str(vol));
Пробовала сделать так
Код:
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
f=str2num(get(handles.edit37, 'String'));
d=str2num(get(handles.edit38, 'String'));
for k=f:d
I=strcat('15min_',num2str(k),'jpg')
in=(d-f)
text(732,501,'…',...
'FontSize',7,'HorizontalAlignment','right')
hy=fspecial('sobel');
hx=hy';
Iy=imfilter(double(I), hy, 'replicate');
Ix=imfilter(double(I), hx, 'replicate');
gradmag=sqrt(Ix.^2+Iy.^2);
L=watershed(gradmag);
Lrgb=label2rgb(L);
se=strel('disk', 20);
Io=imopen(I, se);
Ie=imerode(I, se);
Iobr=imreconstruct(Ie, I);
Ioc=imclose(Io, se);
Iobrd=imdilate(Iobr, se);
Iobrcbr=imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr=imcomplement(Iobrcbr);
fgm=imregionalmax(Iobrcbr);
I2=I;
I2(fgm)=255;
se2=strel(ones(5, 5));
fgm2=imclose(fgm, se2);
fgm3=imerode(fgm2, se2);
fgm4=bwareaopen(fgm3, 20);
I3=I;
I3(fgm4)=255;
bw=im2bw(Iobrcbr, graythresh(Iobrcbr));
D=bwdist(bw);
DL=watershed(D);
bgm=DL==0;
gradmag2=imimposemin(gradmag, bgm | fgm4);
L=watershed(gradmag2);
I4=I;
I4(imdilate(L==0, ones(3, 3))|bgm|fgm4)=255;
Lrgb=label2rgb(L, 'jet', 'w', 'shuffle');
grayimg = rgb2gray(Lrgb);
grayimg = imadjust(grayimg);
binar=im2bw(grayimg, 0.5)
binar=~binar
se = strel('disk',1);
bin = imopen(binar,se);
[B,L] = bwboundaries(bin);
stats = regionprops(L,'Centroid','EquivDiameter');
imshow(binar)
hold on
for k = 1:length(B)
boundary = B{k};
radius = stats(k).EquivDiameter/2;
xc = stats(k).Centroid(1);
yc = stats(k).Centroid(2);
theta = 0:0.01:2*pi;
Xfit = radius*cos(theta) + xc;
Yfit = radius*sin(theta) + yc;
if radius>250
plot(Xfit, Yfit, 'g');
text(boundary(1,2)-15,boundary(1,1)+15, num2str(radius,3),'Color','r',...
'FontSize',8);
set(handles.text2, 'string', num2str(radius));
vol=4*pi*radius*radius*radius/3;
set(handles.text7, 'string', num2str(vol));
j=str2num(get(handles.edit3, 'String'));
novradius=j*radius;
set(handles.text14, 'string', num2str(novradius));
novvol=4*pi*novradius*novradius*novradius/3;
set(handles.text12, 'string', num2str(novvol));
tmp_data=get(handles.uitable3,'Data');
if isnumeric(tmp_data)&& gt(size(tmp_data,1), 1)
for m=1:1:in
tmp_data(m, 2)=vol;
set(handles.uitable3, 'Data', tmp_data);
end
elseif iscell(tmp_data)&& gt(size(tmp_data, 1), d+(w+2))
for i=1:1:in;
tmp_data(m, 2)=num2cell(vol);
set(handles.uitable3, 'Data', tmp_data);
end;
end;
end
end
end
Пожалуйста, помогите мне в решении данного вопроса. Безысходная ситуация. Приму любую помощь.
|