matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务?
1个回答
展开全部
你可以试试下面的程序:
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)
% 以上的程序已测试过,对灰度图像和真彩图像都可以运行。
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)
% 以上的程序已测试过,对灰度图像和真彩图像都可以运行。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询