你可以試試下面的程式:
I=imread("myphoto.jpg"); % 假設要處理的影象是myphoto.jpg
heights=size(I,1); % 影象的高
widths=size(I,2); % 影象的寬
m=8; % 假設縱向分成8幅圖
n=10; % 假設橫向分成10幅圖
% 考慮到rows和cols不一定能被m和n整除,所以對行數和列數均分後要取整
rows=round(linspace(0,heights,m+1)); % 各子影象的起始和終止行標
cols=round(linspace(0,widths,n+1)); % 各子影象的起始和終止列標
blocks=cell(m,n); % 用一個單元陣列容納各個子影象
for k1=1:m
for k2=1:n
blocks{k1,k2}=I(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:);
subimage=blocks{k1,k2};
% 以下是對subimage進行邊緣檢測
% 加入邊緣檢測的程式碼
% 以上是對subimage進行邊緣檢測
blocks{k1,k2}=subimage;
end
processed=I; % processed為處理後的影象,用原影象對其初始化
% 以下為拼接影象
processed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2};
figure,imshow(processed)
% 以上的程式已測試過,對灰度影象和真彩圖像都可以執行。
你可以試試下面的程式:
I=imread("myphoto.jpg"); % 假設要處理的影象是myphoto.jpg
heights=size(I,1); % 影象的高
widths=size(I,2); % 影象的寬
m=8; % 假設縱向分成8幅圖
n=10; % 假設橫向分成10幅圖
% 考慮到rows和cols不一定能被m和n整除,所以對行數和列數均分後要取整
rows=round(linspace(0,heights,m+1)); % 各子影象的起始和終止行標
cols=round(linspace(0,widths,n+1)); % 各子影象的起始和終止列標
blocks=cell(m,n); % 用一個單元陣列容納各個子影象
for k1=1:m
for k2=1:n
blocks{k1,k2}=I(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:);
subimage=blocks{k1,k2};
% 以下是對subimage進行邊緣檢測
% 加入邊緣檢測的程式碼
% 以上是對subimage進行邊緣檢測
blocks{k1,k2}=subimage;
end
end
processed=I; % processed為處理後的影象,用原影象對其初始化
% 以下為拼接影象
for k1=1:m
for k2=1:n
processed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2};
end
end
figure,imshow(processed)
% 以上的程式已測試過,對灰度影象和真彩圖像都可以執行。