具体程序如下:
close all;
clear all;
clc;
img=double(imread('C:\Users\lenovo\Desktop\wj.jpg'));
mask=rgb2gray(imread('C:\Users\lenovo\Desktop\wj.jpg'))>160;
[m n]=size(img);
for i=1:m
for j=1:n
if mask(i,j)==0;
img(i,j)=0;
end
end
end
imshow(img,[]); %合成的需要修复的图像
lambda=0.2;
a=0.5;
imgn=img;
for l=1:300 %迭代次数
for i=2:m-1
for j=2:n-1
if mask(i,j)==0 %如果当前像素是被污染的像素,则进行处理
Un=sqrt((img(i,j)-img(i-1,j))^2+((img(i-1,j-1)-img(i-1,j+1))/2)^2);
Ue=sqrt((img(i,j)-img(i,j+1))^2+((img(i-1,j+1)-img(i+1,j+1))/2)^2);
Uw=sqrt((img(i,j)-img(i,j-1))^2+((img(i-1,j-1)-img(i+1,j-1))/2)^2);
Us=sqrt((img(i,j)-img(i+1,j))^2+((img(i+1,j-1)-img(i+1,j+1))/2)^2);
Wn=1/sqrt(Un^2+a^2);
We=1/sqrt(Ue^2+a^2);
Ww=1/sqrt(Uw^2+a^2);
Ws=1/sqrt(Us^2+a^2);
Hon=Wn/((Wn+We+Ww+Ws)+lambda);
Hoe=We/((Wn+We+Ww+Ws)+lambda);
How=Ww/((Wn+We+Ww+Ws)+lambda);
Hos=Ws/((Wn+We+Ww+Ws)+lambda);
Hoo=lambda/((Wn+We+Ww+Ws)+lambda);
imgn(i,j)=Hon*img(i-1,j)+Hoe*img(i,j+1)+How*img(i,j-1)+Hos*img(i+1,j)+Hoo*img(i,j);
end
end
end
img=imgn;
end
figure;
imshow(img,[])
原因分析
可能的原因是,这段程序本来用于处理别的图像文件,被你换了一张图片。
程序原来处理的图片应该是索引色的(indexed image),图像数据是二维数组,而你现在的图片是真彩色(RGB image),图像数据是三维数组,所以,在上面一行
[m n]=size(img);所得到的n并非图像的宽度,而是图像宽度的3倍,后面循环的时候就会导致数组下标越界。
修改建议
把程序原来的第一行
img=double(imread('C:\Users\lenovo\Desktop\wj.jpg'));改为
img=imread('C:\Users\lenovo\Desktop\wj.jpg');应该可以适应两种不同的图像数据。
希望对你有帮助。
MATLAB程序执行后出现这种情况,请大神知道,急急急!!!Error in ==>...
可能的原因是,这段程序本来用于处理别的图像文件,被你换了一张图片。程序原来处理的图片应该是索引色的(indexed image),图像数据是二维数组,而你现在的图片是真彩色(RGB image),图像数据是三维数组,所以,在上面一行 [m n]=size(img);所得到的n并非图像的宽度,而是图像宽度的3倍,后面循环...
matlab总是提示维数不匹配 Error in ==> Untitled at 96 T(j,1)=...
\/ `._ _.' \\ ( @ : `. .' : @ )\\ `. `. ._ _. .' .' \/ \\;' `. `. \\ \/ .' .' `;\/ \\`. `. \\ \\_\/ \/ .' .'\/ ) :-._`. \\ (:) \/ .'_.-: ((`...,`.\\\/:\\\/.',...')>---._|:::|_.---< \/ .'....
...dimensions must agree. Error in ==> Untitled6 at
我运行没问题啊
...rgb" is undefined. Error in ==> Untitled at 14 rgb = im2doubl...
rgb没有赋值,im2double.m子文件不存在,就是还缺少程序。
...Index exceeds matrix dimensions. Error in ==>
楼主你的J图像大小是多少?我测试J的大小是256*256,可以运行,出结果。查看你的图像大小是否是256*256,如果不是的话,K是8,8*8的子块肯定不符合其大小。
急急!!求助matlab高手
Error:File:D:\\MATLAB6p5\\work\\Untitled2.mLine:1Column:1Missingvariableorfunction.不知道为什么。#include<stdio.h>#include<s... 这是一个遗传算法的一部分,在程序运行后,出现:??? Error: File: D:\\MATLAB6p5\\work\\Untitled2.m Line: 1Column: 1Missing variable or function.不知道为什么。 #include...
matlab程序报错,错误使用 plot 矢量长度必须相同
x,y数组的长度要相等,长度要相同。可以在plot函数前设置断点,看下plot(k,error);,k和error分别是多少。因为代码里有sim('untitled1');因为matlab处理的是数字信号,就是非连续的信号(离散的),想要画出一个图形,横纵坐标必长度必须相同,不然纵坐标的某一个点没有对应的横坐标,反之亦然。
Matlab程序运行出错怎么修改
矩阵的维数不对,你看一下x1维数和d的是否是一样的,要相同可以相加的,后者说d转置的维数和x1是否相同
Error in ==> C:\\MATLAB6p5\\work\\Untitled.m
所提取语音信号矢量为列矩阵,产生的随机噪声是行矩阵,要对行矩阵进行转置,然后才能相加。或者使用AWGN函数。
...variable "Year1". Error in ==> Untitled2 at 6 population1=polyval...
2)population1=polyval(P2,year1);population2=polyval(P2,year2);plot(year,population,'*',year2,population2,'X',year1,population1);legend('实际数据','拟合数据')xlabel('年份');ylabel('人口数量(亿人)')主要是把Y改为y,P改为p,最后一行应为ylabel()。已经改正,复制即可 ...