MATLAB中的for循环怎么用
我想对每种滤波后的结果分别进行不同类型的边缘检测,但是我定义的矩阵不知道怎么回事,总是说为空矩阵,若不用矩阵方式调用,请问各位有什么高招;以下是我编写的程序,希望大家帮忙...
我想对每种滤波后的结果分别进行不同类型的边缘检测,但是我定义的矩阵不知道怎么回事,总是说为空矩阵,若不用矩阵方式调用,请问各位有什么高招;以下是我编写的程序,希望大家帮忙改一下:
clear;close all
I=imread('road2.jpg');%读入原始jpg格式图像
figure;
imshow(I);title('原始图像');
I1=rgb2gray(I);%将原图像转化为灰度图象
figure;subplot(221);
imshow(I1);title('灰度图像');
I2=medfilt2(I1);%滤波默认窗口为[3,3]
subplot(222);imshow(I2);title('中值滤波结果');
I3=filter2(fspecial('average',3),I1)/255; %模板尺寸为3
subplot(223);imshow(I3);title('均值滤波结果');
I4=wiener2(I1,[3 3]); %对图像进行二维自适应维纳滤波
subplot(224);imshow(I4); title('自适应滤波结果');
J=[I1,I2,I3,I4];%这里的矩阵为什么是空的?
for j=1:4;
Ij=J(1,j);
BW1=edge(Ij,'prewitt');%边缘检测
BW2=edge(Ij,'canny');
BW3=edge(Ij,'log');
BW4=edge(Ij,'sobel');
figure;
subplot(221);imshow(BW1);title('prewitt算子');
subplot(222);imshow(BW2);title('canny算子');
subplot(223);imshow(BW3);title('laplacian算子');
subplot(224);imshow(BW4);title('sobel算子');
end
figure;subplot(121);imhist(I1);title('灰度直方图');%观察灰度直方图, 灰度200处有谷,确定阈值T=200
I5=im2bw(I1,220/255); % im2bw函数需要将灰度值转换到[0,1]范围内
subplot(122);imshow(I5);title('直方图阈值分割效果'); 展开
clear;close all
I=imread('road2.jpg');%读入原始jpg格式图像
figure;
imshow(I);title('原始图像');
I1=rgb2gray(I);%将原图像转化为灰度图象
figure;subplot(221);
imshow(I1);title('灰度图像');
I2=medfilt2(I1);%滤波默认窗口为[3,3]
subplot(222);imshow(I2);title('中值滤波结果');
I3=filter2(fspecial('average',3),I1)/255; %模板尺寸为3
subplot(223);imshow(I3);title('均值滤波结果');
I4=wiener2(I1,[3 3]); %对图像进行二维自适应维纳滤波
subplot(224);imshow(I4); title('自适应滤波结果');
J=[I1,I2,I3,I4];%这里的矩阵为什么是空的?
for j=1:4;
Ij=J(1,j);
BW1=edge(Ij,'prewitt');%边缘检测
BW2=edge(Ij,'canny');
BW3=edge(Ij,'log');
BW4=edge(Ij,'sobel');
figure;
subplot(221);imshow(BW1);title('prewitt算子');
subplot(222);imshow(BW2);title('canny算子');
subplot(223);imshow(BW3);title('laplacian算子');
subplot(224);imshow(BW4);title('sobel算子');
end
figure;subplot(121);imhist(I1);title('灰度直方图');%观察灰度直方图, 灰度200处有谷,确定阈值T=200
I5=im2bw(I1,220/255); % im2bw函数需要将灰度值转换到[0,1]范围内
subplot(122);imshow(I5);title('直方图阈值分割效果'); 展开
展开全部
Matlab中matlab中for 循环的原理和应用
for 循环是用在须重复执行且执行次数有一定的算式,它的结构如下:
for index = array
command A
end
如果我们要计算一缆车离铁塔的速度 (v),它的速度计算方式与且铁塔的距离 (d)有关,假设以 10 公尺为判断值,则速度计算分为二个算式:
假设有一个阵列 d 为缆车到铁塔的距离,则以下的for 循环可计算速对应的速度 >> for k = 1:length(d)
if d(k) <= 10
velocity = 0.425 + 0.00175*d(k)^2;
else
velocity = 0.625 + 0.12*d - 0.00025*d(k)^2;
end
fprintf('d= %f velocity= %f\n',d(k),velocity)
end
另外几个例子
>> for n=1:10
x(n)=sin(n*pi/10);
end
>> disp(x)
>> for n=1:5
for m=5:-1:1
A(n,m)=n^2+m^2;
end
disp(n)
end
>> disp(A)
但是如果可以用阵列或是矩阵运算来取代以for 循环计算,就应采用前者因为计算速度快多了。上述的例子 可改为
>> n=1:10;
>> x=sin(n*pi/10);
使用 for 循环的规则如下:
上述的 for 循环中的指标 (index) 须为是一变数。
如果 array 代表阵列是空无一物,则循环不会被执行,例如 k=1:0。
如果 array 代表阵列是一纯量,则循环会被执行一次,例如 k=1:1。
如果 array 代表阵列是一向量,则循环会被依序的执行,例如 k=1:b, b=[1 3 5]。 如果 array 代表阵列是一矩阵,则循环会被逐行依序的执行,例如 k=1:B, B=[1 2; 3 4]。
for 完整的语法为: for k = first:increment:last,其中的 first, increment, last分别为初始值,增量,终止值。而循环被执行的次数由以下的算式决定: 1. 2. 3. 4. 5. 6.
floor((last-first)/increment)+1
如果计算得到的值为负,则循环不被执行。
for 循环是用在须重复执行且执行次数有一定的算式,它的结构如下:
for index = array
command A
end
如果我们要计算一缆车离铁塔的速度 (v),它的速度计算方式与且铁塔的距离 (d)有关,假设以 10 公尺为判断值,则速度计算分为二个算式:
假设有一个阵列 d 为缆车到铁塔的距离,则以下的for 循环可计算速对应的速度 >> for k = 1:length(d)
if d(k) <= 10
velocity = 0.425 + 0.00175*d(k)^2;
else
velocity = 0.625 + 0.12*d - 0.00025*d(k)^2;
end
fprintf('d= %f velocity= %f\n',d(k),velocity)
end
另外几个例子
>> for n=1:10
x(n)=sin(n*pi/10);
end
>> disp(x)
>> for n=1:5
for m=5:-1:1
A(n,m)=n^2+m^2;
end
disp(n)
end
>> disp(A)
但是如果可以用阵列或是矩阵运算来取代以for 循环计算,就应采用前者因为计算速度快多了。上述的例子 可改为
>> n=1:10;
>> x=sin(n*pi/10);
使用 for 循环的规则如下:
上述的 for 循环中的指标 (index) 须为是一变数。
如果 array 代表阵列是空无一物,则循环不会被执行,例如 k=1:0。
如果 array 代表阵列是一纯量,则循环会被执行一次,例如 k=1:1。
如果 array 代表阵列是一向量,则循环会被依序的执行,例如 k=1:b, b=[1 3 5]。 如果 array 代表阵列是一矩阵,则循环会被逐行依序的执行,例如 k=1:B, B=[1 2; 3 4]。
for 完整的语法为: for k = first:increment:last,其中的 first, increment, last分别为初始值,增量,终止值。而循环被执行的次数由以下的算式决定: 1. 2. 3. 4. 5. 6.
floor((last-first)/increment)+1
如果计算得到的值为负,则循环不被执行。
展开全部
不是空的,赋值的时候出错了,我改了一点,不知道对你有用没。。
% clear;close all
I=imread('1.jpg');%读入原始jpg格式图像
figure
plot(1,1)
imshow(I)
W=size(I,2); %得到图像高度
I1=rgb2gray(I);%将原图像转化为灰度图象
figure;subplot(221);
imshow(I1);title('灰度图像');
I2=medfilt2(I1);%滤波默认窗口为[3,3]
subplot(222);imshow(I2);title('中值滤波结果');
I3=filter2(fspecial('average',3),I1)/255; %模板尺寸为3
subplot(223);imshow(I3);title('均值滤波结果');
I4=wiener2(I1,[3 3]); %对图像进行二维自适应维纳滤波
subplot(224);imshow(I4); title('自适应滤波结果');
J=[I1,I2,I3,I4];%这里的矩阵为什么是空的?
for j=1:4;
Ij=J(:,1+W*(j-1):W*j); %%给Ij赋值
BW1=edge(Ij,'prewitt');%边缘检测
BW2=edge(Ij,'canny');
BW3=edge(Ij,'log');
BW4=edge(Ij,'sobel');
figure;
subplot(221);imshow(BW1);title('prewitt算子');
subplot(222);imshow(BW2);title('canny算子');
subplot(223);imshow(BW3);title('laplacian算子');
subplot(224);imshow(BW4);title('sobel算子');
end
figure;subplot(121);imhist(I1);title('灰度直方图');%观察灰度直方图, 灰度200处有谷,确定阈值T=200
I5=im2bw(I1,220/255); % im2bw函数需要将灰度值转换到[0,1]范围内
subplot(122);imshow(I5);title('直方图阈值分割效果');
% clear;close all
I=imread('1.jpg');%读入原始jpg格式图像
figure
plot(1,1)
imshow(I)
W=size(I,2); %得到图像高度
I1=rgb2gray(I);%将原图像转化为灰度图象
figure;subplot(221);
imshow(I1);title('灰度图像');
I2=medfilt2(I1);%滤波默认窗口为[3,3]
subplot(222);imshow(I2);title('中值滤波结果');
I3=filter2(fspecial('average',3),I1)/255; %模板尺寸为3
subplot(223);imshow(I3);title('均值滤波结果');
I4=wiener2(I1,[3 3]); %对图像进行二维自适应维纳滤波
subplot(224);imshow(I4); title('自适应滤波结果');
J=[I1,I2,I3,I4];%这里的矩阵为什么是空的?
for j=1:4;
Ij=J(:,1+W*(j-1):W*j); %%给Ij赋值
BW1=edge(Ij,'prewitt');%边缘检测
BW2=edge(Ij,'canny');
BW3=edge(Ij,'log');
BW4=edge(Ij,'sobel');
figure;
subplot(221);imshow(BW1);title('prewitt算子');
subplot(222);imshow(BW2);title('canny算子');
subplot(223);imshow(BW3);title('laplacian算子');
subplot(224);imshow(BW4);title('sobel算子');
end
figure;subplot(121);imhist(I1);title('灰度直方图');%观察灰度直方图, 灰度200处有谷,确定阈值T=200
I5=im2bw(I1,220/255); % im2bw函数需要将灰度值转换到[0,1]范围内
subplot(122);imshow(I5);title('直方图阈值分割效果');
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
J{1}=I1;
J{2}=I2;
J{3}=I3;
J{4}=I4;
Ij=J{i};
J{2}=I2;
J{3}=I3;
J{4}=I4;
Ij=J{i};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |