Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 使用MATLAB比较图像的颜色变化_Image_Matlab - Fatal编程技术网

Image 使用MATLAB比较图像的颜色变化

Image 使用MATLAB比较图像的颜色变化,image,matlab,Image,Matlab,我打算选择一个点的图像和比较其他点的RGB 值,然后更改类似点的颜色,但我失败了。以下是我的代码: function exchangecolor() I1=imread('F:\28.jpg'); I2=imread('F:\29.jpg'); [m1,n1,x1]=(size(I1)); [m2,n2,x2]=size(I2); //[399,400,3]=size(I1)=size(I2) r1=I1(200,200,1); r2=I2(200,200,1); g1=I1(2

我打算选择一个点的图像和比较其他点的RGB 值,然后更改类似点的颜色,但我失败了。以下是我的代码:

function exchangecolor()
I1=imread('F:\28.jpg');   
I2=imread('F:\29.jpg'); 
[m1,n1,x1]=(size(I1));
[m2,n2,x2]=size(I2);  //[399,400,3]=size(I1)=size(I2)
r1=I1(200,200,1);  
r2=I2(200,200,1);

g1=I1(200,200,2);
g2=I2(200,200,2);

b1=I1(200,200,3);
b2=I2(200,200,3);

for i=1:m1
    for j=1:n1
        if abs(I1(i,j,1)-r1)<=10
            if abs(I1(i,j,2)-g1)<=10
                if abs(I1(i,j,3)-b1)<=10
                    I1(i,j,1)=r2;
                    I1(i,j,2)=g2;
                    I1(i,j,3)=b2;
                end
            end
        end
    end
  end
imwrite(I1,'F:\89.jpg','jpg');
函数exchangecolor()
I1=imread('F:\28.jpg');
I2=imread('F:\29.jpg');
[m1,n1,x1]=(大小(I1));
[m2,n2,x2]=尺寸(I2)//[399400,3]=尺寸(I1)=尺寸(I2)
r1=I1(200200,1);
r2=I2(200200,1);
g1=I1(200200,2);
g2=I2(200200,2);
b1=I1(200200,3);
b2=I2(200200,3);
对于i=1:m1
对于j=1:n1

if abs(I1(i,j,1)-r1)我不确定代码的正确性,但是嵌套循环和if子句不是Matlab风格的方法

您是否考虑过这种方法:

rgb1 = I1(200,200,:);
rgb2 = I2(200,200,:);
sel = all( abs( bsxfun(@minus, I1, rgb1) ) <= 10, 3 );%//need care when subtracting `uint` type!
% replace
for ci=1:3
    tmp = I1(:,:,ci);
    tmp(sel) = rgb2(ci);
    I1(:,:,ci) = tmp;
end
rgb1=I1(200200,:);
rgb2=I2(200200,:);

sel=全部(abs(bsxfun(@减号,I1,rgb1))你以什么方式失败了?示例图像,如果你有权发布它们,也会有很大帮助。简单的逻辑只适用于非常简单的图像。@Oliver我失败了,因为我从比较中得到的“相似”点不正确。换句话说,我找不到相似的点。@Neil抱歉,我没有权利。我选择的图像除了衣服的颜色,其他都很相似。@微笑你可能会发现与你的问题相关。谢谢你的帮助和建议。我是一个初学者。下次我会更加注意我的变量名。但是你提供的代码不是很好。我认为我的逻辑不实用。