[已答复] 图像边界处理,用扩展图像补零方法,运行出现索引超出矩阵维度。

[复制链接]
蕾蕾_pENn0 发表于 2021-10-13 20:45:32
  1. %扩展图像补0
  2. I=imread('图2.bmp');
  3. I=rgb2gray(I);
  4. [m,n]=size(I);
  5. I1=im2double(I);
  6. k=5;
  7. model(1:k,1:k)=1;%建立k×k模板,元素全是1
  8. I2=padarray(I1,[(k-1)/2 (k-1)/2]);%扩展周围补零
  9. for i=1:m+k-1
  10.     for j=1:n+k-1
  11.         x=I2(i:i+k-1,j:j+k-1);%取出I2中从(i,j)开始的k行k列元素
  12.         xuint=uint8(model).*uint8(x);
  13.         x_avg=mean(xuint(:));%求出与模板运算后的各元素的均值
  14.         I3(i+(k-1)/2,j+(k-1)/2)=x_avg; %赋给模板中心位置的元素
  15.     end
  16. end
  17. figure;
  18. subplot(121);imshow(I);title('原图像');
  19. subplot(122);imshow(I3);title('处理后的图像');
复制代码
出问题的应该是
  1. for i=1:m+k-1
  2.     for j=1:n+k-1
  3.         x=I2(i:i+k-1,j:j+k-1);%取出I2中从(i,j)开始的k行k列元素
  4.         xuint=uint8(model).*uint8(x);
  5.         x_avg=mean(xuint(:));%求出与模板运算后的各元素的均值
  6.         I3(i+(k-1)/2,j+(k-1)/2)=x_avg; %赋给模板中心位置的元素
  7.     end
  8. end
复制代码
运行之后出现索引超出矩阵维度,而且i的值为1,没有变化不知道哪里写错了,如何修改?


捕获.PNG

1 条回复


wjb986555360 发表于 4 天前
你 for 循环有问题,超矩阵维度,已给你改了
clear all
clc
%扩展图像补0
I=imread('2.bmp');
I=rgb2gray(I);
[m,n]=size(I);
I1=im2double(I);
k=5;
model(1:k,1:k)=1;%建立k×k模板,元素全是1
I2=padarray(I1,[(k-1)/2 (k-1)/2]);%扩展周围补零
for i=1:m
   
    for j=1:n
        x=I2(i:i+k-1,j:j+k-1);%取出I2中从(i,j)开始的k行k列元素
        xuint=uint8(model).*uint8(x);
        x_avg=mean(xuint(:));%求出与模板运算后的各元素的均值
        I3(i+(k-1)/2,j+(k-1)/2)=x_avg; %赋给模板中心位置的元素
    end
end
figure;
subplot(121);imshow(I);title('原图像');
subplot(122);imshow(I3);title('处理后的图像');

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表