分割画像
a=imread('a.jpg');
for i=1:70
eval(['Q',num2str(i),'=a((i-1)*1400+1:i*1400,:,:);']);
end
for i=1:70
eval(['imwrite(Q',num2str(i), ',''result',num2str(i),'.jpg'');']);
close all
end
ここでは、imwrite関数を使用して、MATLAB図面の白いエッジを削除しています。
境界線を見つける
close all
len_r=[];
for tt=1:70
xy_r=[];
eval(['I=imread(''result',num2str(tt),'.jpg'');']);
I = rgb2gray(I);
%I = imrotate(I,33,'crop');
% figure
% imshow(rotI);
BW = edge(I,'canny');
% figure
% imshow(BW);
[H,T,R] = hough(BW);
% figure
% imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');
% xlabel('\theta'), ylabel('\rho');
% axis on
% axis normal
% hold on
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));
% plot(x,y,'s','color','white');
% Find lines and plot them
lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
figure, imshow(I),hold on
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% Plot beginnings and ends of lines
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
% Determine the endpoints of the longest line segment
len = norm(lines(k).point1 - lines(k).point2);
if (len>950)&&xy(1,1)~=xy(2,1)
xy_long = xy;
len_r=[len_r;tt,len,xy(1,2)];
xy_r=[xy_r,xy];
end
end
% highlight the longest line segment
for i=1:size(xy_r,2)/2
plot(xy_r(:,2*i-1),xy_r(:,2*i),'LineWidth',2,'Color','blue');
end
end
分割線に従って分割する
close all
for tt=1:70
eval(['I=imread(''result',num2str(tt),'.jpg'');']);
if tt>1
eval(['I1=imread(''result',num2str(tt-1),'.jpg'');']);
I2=I1(len_r(tt-1,3):end,:,:);
a=[I2;I(1:len_r(tt,3),:,:)];
else
a=I(1:len_r(tt,3),:,:);
end
eval(['imwrite(a,''final',num2str(tt),'.jpg'');']);
end