matlabを使用して、分割線に従って長い画像を複数の画像に分割します

分割画像

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

おすすめ

転載: blog.csdn.net/weixin_40653652/article/details/115282485