查看: 758|回复: 12|关注: 0

[已解决] 运行出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题

[复制链接]

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
A=imread(filename);
imshow(A);
ImgHeight=size(A,1);
ImgWidth=size(A,2);

%图像反色
B=255-double(A);
figure(2);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(B));title('反白显示');
%自动亮度,增亮后的均值为参数Light
s1=min(min(A));
s2=max(max(A));
for i=1:ImgHeight
    for j=1:ImgWidth
       C(i,j)=(255-0)/(s2-s1)*(A(i,j)-s1);(这句会提醒出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题
    end
end
figure(3);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(C));title('自动亮度');

%灰度变换
scale=2.2;bias=-40;
D=bias+scale*double(A);
order = find(D>255);
D(order)=255;
order = find(D<0);
D(order)=0;
figure(4);
t=0:255;
Y=bias+scale*double(0:255);
order = find(Y>255);
Y(order)=255;
order = find(Y<0);
Y(order)=0;
subplot(1,3,1);imshow(A);title('原图');
subplot(1,3,2);plot(0:255,Y);title('变换函数'); grid on;axis tight;
subplot(1,3,3);imshow(uint8(D));title('灰度变换');

%灰度拉伸
a=2;b=70;E=A;
for i=0 :255
    order=find(A==i);
    E(order)=255/(b-a)*(i-a);
end
order = find(E>255);
E(order)=255;
order = find(E<0);
E(order)=0;
figure(5);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(E));title('灰度拉伸');

%伪彩色处理
RED=[200 0 0];
GREEN=[0 255 0];
BLUE=[0 0 255];
F=zeros(size(A,1),size(A,2),3);
[x y]=find(A<20);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=RED;
end
[x y]=find(A>=20 & A<40);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=GREEN;
end
[x y]=find(A>=40);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=BLUE;
end
figure(6);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(F));title('伪彩色处理');

%直方图均衡化处理
GrayScale=256;
buff=zeros(GrayScale,1);
for i=1:size(A,1)
    for j=1:size(A,2)
        buff(A(i,j))=buff(A(i,j))+1;
    end
end
buff=buff/(size(A,1)*size(A,2));
figure(7);
subplot(2,2,3);bar(0:GrayScale-1,buff);title('原图的直方图'); grid on;axis tight;
subplot(2,2,1);imshow(A);title('原图');
%P
Fprob=zeros(GrayScale,1);
Fprob(1)=buff(1);
for i=2:GrayScale
    Fprob(i)=buff(i)+Fprob(i-1);
end
G=zeros(size(A,1),size(A,2));
buf=zeros(GrayScale,1);
for i=1:GrayScale
buf(round(Fprob(i)*(GrayScale-1)+1))=buf(round(Fprob(i)*(GrayScale-1)+1))+buff(i);   
    order=find(A==i);
    G(order)=round(Fprob(i)*(GrayScale-1)+1);   
end
figure(7);
subplot(2,2,4);bar(0:(GrayScale-1),buf);
title('均衡化后的直方图'); grid on;axis tight;
subplot(2,2,2);imshow(uint8(G));title('均衡化后的图');
求大神帮忙解决一下这个是什么问题,谢谢

回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-6-19 21:42:08 | 显示全部楼层
  1. for i=1:ImgHeight
  2.     for j=1:ImgWidth
  3.        C(i,j)=(255-0)/(s2-s1)*(A(i,j)-s1);(这句会提醒出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题)
  4.     end
  5. end
复制代码

改为
  1. C=zeros(ImgHeight,ImgWidth);
  2. for i=1:ImgHeight
  3.     for j=1:ImgWidth
  4.        C(i,j)=(255-0)/(s2-s1)*(A(i,j)-s1);(这句会提醒出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题)
  5.     end
  6. end
复制代码

试试
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-6-20 00:47:28 | 显示全部楼层
本帖最后由 柠檬小熊 于 2020-6-20 00:56 编辑

这样子怎么解决呀?
222.png
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-6-20 10:30:18 | 显示全部楼层
改成
  1. C=zeros(ImgHeight,ImgWidth,3);
  2. for i=1:ImgHeight
  3.     for j=1:ImgWidth
  4.        C(i,j)=(255-0)/(s2-s1)*(A(i,j)-s1);(这句会提醒出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题)
  5.     end
  6. end
复制代码

试试
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-6-20 14:52:29 | 显示全部楼层

还是这个样子:'(  
111.png
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-6-20 15:37:37 | 显示全部楼层 |此回复为最佳答案
改成
  1. C=zeros(ImgHeight,ImgWidth,3);
  2. for i=1:ImgHeight
  3.     for j=1:ImgWidth
  4.        C(i,j,:)=(255-0)/(s2-s1)*(A(i,j)-s1);(这句会提醒出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题)
  5.     end
  6. end
复制代码

试试
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-6-20 15:54:14 | 显示全部楼层

for i=1:GrayScale
buf(round(Fprob(i)*(GrayScale-1)+1))=buf(round(Fprob(i)*(GrayScale-1)+1))+buff(i);   
    order=find(A==i);
    G(order)=round(Fprob(i)*(GrayScale-1)+1); (试图沿模糊的维增大数组。)
end
这样子怎么解决呀?

222.png
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-6-20 16:10:31 | 显示全部楼层

如果扩大维度就变成了这个样子
333.png
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-6-20 16:24:17 | 显示全部楼层
请上传对应图片和完整程序,使别人可以运行
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-6-20 17:01:21 | 显示全部楼层
20141303 发表于 2020-6-20 16:24
请上传对应图片和完整程序,使别人可以运行

clear;close all;
clc;
filename='miaowu.bmp';
A=imread(filename);
imshow(A);
ImgHeight=size(A,1);
ImgWidth=size(A,2);

%图像反色
B=255-double(A);
figure(2);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(B));title('反白显示');
%自动亮度,增亮后的均值为参数Light
s1=min(min(A));
s2=max(max(A));
C=zeros(ImgHeight,ImgWidth,3);
for i=1:ImgHeight
    for j=1:ImgWidth
       C(i,j,:)=(255-0)/(s2-s1).*(A(i,j)-s1);
    end
end
figure(3);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(C));title('自动亮度');

%灰度变换
scale=2.2;bias=-40;
D=bias+scale*double(A);
order = D>255;
D(order)=255;
order = D<0;
D(order)=0;
figure(4);
t=0:255;
Y=bias+scale*double(0:255);
order = Y>255;
Y(order)=255;
order = Y<0;
Y(order)=0;
subplot(1,3,1);imshow(A);title('原图');
subplot(1,3,2);plot(0:255,Y);title('变换函数'); grid on;axis tight;
subplot(1,3,3);imshow(uint8(D));title('灰度变换');

%灰度拉伸
a=2;b=70;E=A;
for i=0 :255
    order=A==i;
    E(order)=255/(b-a)*(i-a);
end
order = E>255;
E(order)=255;
order = find(E<0);
E(order)=0;
figure(5);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(E));title('灰度拉伸');

%伪彩色处理
RED=[200 0 0];
GREEN=[0 255 0];
BLUE=[0 0 255];
F=zeros(size(A,1),size(A,2),3);
[x, y]=find(A<20);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=RED;
end
[x, y]=find(A>=20 & A<40);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=GREEN;
end
[x, y]=find(A>=40);
for i=1:size(x,1)*size(x,2)
    F(x(i),y(i),:)=BLUE;
end
figure(6);
subplot(1,2,1);imshow(A);title('原图');
subplot(1,2,2);imshow(uint8(F));title('伪彩色处理');

%直方图均衡化处理
GrayScale=256;
buff=zeros(GrayScale,1);
for i=1:size(A,1)
    for j=1:size(A,2)
        buff(A(i,j))=buff(A(i,j))+1;
    end
end
buff=buff/(size(A,1)*size(A,2));
figure(7);
subplot(2,2,3);bar(0:GrayScale-1,buff);title('原图的直方图'); grid on;axis tight;
subplot(2,2,1);imshow(A);title('原图');
%P
Fprob=zeros(GrayScale,1);
Fprob(1)=buff(1);
for i=2:GrayScale
    Fprob(i)=buff(i)+Fprob(i-1);
end
G=zeros(size(A,1),size(A,2));
buf=zeros(GrayScale,1);
for i=1:GrayScale
buf(round(Fprob(i)*(GrayScale-1)+1))=buf(round(Fprob(i)*(GrayScale-1)+1))+buff(i);   
    order=find(A==i);
    G(order,:)=round(Fprob(i)*(GrayScale-1)+1);   
end
figure(7);
subplot(2,2,4);bar(0:(GrayScale-1),buf);
title('均衡化后的直方图'); grid on;axis tight;
subplot(2,2,2);imshow(uint8(G));title('均衡化后的图');
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表