Image 使用条件和循环(MATLAB)将多个图像粘贴到较大的图像中

Image 使用条件和循环(MATLAB)将多个图像粘贴到较大的图像中,image,algorithm,matlab,image-processing,for-loop,Image,Algorithm,Matlab,Image Processing,For Loop,我构建了一个二进制棋盘(制表符): 现在我必须放进几块(典当),就像这样: p_1和p_2的尺寸与棋盘的每个块(301x301 px)相同 如下所示: p_1: p_2: 在另一个练习中,我必须反转第2行的图像,这样做: P1_neg=double(P_1)*-1+255; P2_neg=double(P_2)*-1+255; 我获得以下图像: P1_neg: P2_neg 在第二行,我必须粘贴两种棋子:黑色背景的黑色棋子(p_1),和白色背景的黑色棋子(p_2) 棋盘的每一块都有

我构建了一个二进制棋盘(制表符):

现在我必须放进几块(典当),就像这样:

p_1和p_2的尺寸与棋盘的每个块(301x301 px)相同 如下所示:

p_1:

p_2:

在另一个练习中,我必须反转第2行的图像,这样做:

P1_neg=double(P_1)*-1+255;
P2_neg=double(P_2)*-1+255;
我获得以下图像:

P1_neg:

P2_neg

在第二行,我必须粘贴两种棋子:黑色背景的黑色棋子(
p_1
),和白色背景的黑色棋子(
p_2

棋盘的每一块都有301x301像素,每一块都有相同的尺寸。我只能使用条件和循环,但我不知道如何将这些片段粘贴到那里

因此,我知道第二行:当行(I)为偶数,列(j)为奇数时,我必须粘贴
p_1
;当行是偶数,列也是偶数时,我必须粘贴
P_2

我的代码,是下面的一个,希望你能帮我:)

我无法以原始分辨率上传棋盘,但这里是我使用的代码

tab=zeros(2408);   
  for i=0:7             
     for j=0:7         

       if mod(i,2)~=0 && mod(j,2)~=0                        
        for avanza_fila=(i*301)+1:(i+1)*301                  
            for avanza_columna= (j*301)+1:(j+1)*301          
                tab(avanza_fila,avanza_columna)=255; 
            end
        end 
        elseif mod(i,2)==0 && mod(j,2)==0                   
           for avanza_fila=(i*301)+1:(i+1)*301
               for avanza_columna= (j*301)+1:(j+1)*301          
                tab(avanza_fila,avanza_columna)=255;
               end
           end 
       end
    end
end
figure, imshow(tab)

这是我解决你问题的办法。我个人会避免
循环,但你说你的作业需要它。我已经创建了一个高分辨率版本的董事会,您可以在这里获得:

这个棋盘是2408 x 2408,因为每个棋子是301 x 301,在一个8 x 8的网格上。你的逻辑几乎是正确的。你只需要弄清楚如何准确地把瓷砖放在黑板上。我编写了两个
for
循环,其中第一个
for
循环使用第2行和第7行,第二个
for
循环通过第1列到第8列。对于第二行或第七行,我们检查列是偶数还是奇数,并将正确的棋子放置在相应的块中。我还将电路板和图像转换为黑白,以消除任何量化瑕疵,正如我在您发布的图像中看到的那样。此外,我已将您的图像重命名为您在帖子中的名称,因此您可以根据自己编写的代码更改相关名称。我还制作了一份代码板的副本,因此我们不想修改名为
boardCopy
的原始板。此副本将包含放置在棋盘中的棋子。不用多说,下面是代码:

board = imread('boardHigh.png'); %// High-res board
P_1 = im2bw(imread('P_1.png')); %// Load in the pawn pieces
P_2 = im2bw(imread('P_2.png'));
P1_neg = im2bw(imread('P1_neg.png'));
P2_neg = im2bw(imread('P2_neg.png'));
boardCopy = board; %// Make a copy of the board
for row = [2 7]
    for col = 1 : 8
        if row == 2
            if mod(col,2) ~= 0
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_2;
            else
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_1;
            end
        else
            if mod(col,2) ~= 0
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P1_neg;
            else
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P2_neg;
            end
        end
    end
end

figure;
imshow(boardCopy);
这是我用棋子得到的棋盘:


希望这对你有帮助,祝你好运

实际上,你有四种可能的图像。白底黑兵、黑底黑兵、白底白兵、黑底白兵。但是,可以通过反转前两个图像(假设为黑白)来获得最后两个图像。你能给我们看一下当兵的照片吗?一旦我们有了这些,就很容易把它放到你的棋盘上。你只要给我更多!另外,请把链接贴到你原来的棋盘上。你在链接中显示的是缩小尺寸的图片。我无法上传图片,但我将用于构建它的代码放在dropbox上或上传到那里。[url]=
board = imread('boardHigh.png'); %// High-res board
P_1 = im2bw(imread('P_1.png')); %// Load in the pawn pieces
P_2 = im2bw(imread('P_2.png'));
P1_neg = im2bw(imread('P1_neg.png'));
P2_neg = im2bw(imread('P2_neg.png'));
boardCopy = board; %// Make a copy of the board
for row = [2 7]
    for col = 1 : 8
        if row == 2
            if mod(col,2) ~= 0
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_2;
            else
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_1;
            end
        else
            if mod(col,2) ~= 0
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P1_neg;
            else
                boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P2_neg;
            end
        end
    end
end

figure;
imshow(boardCopy);