【问题标题】:Replace the first value in each cell of a cell array with the value from another cell array MATLAB将元胞数组的每个元胞中的第一个值替换为另一个元胞数组中的值 MATLAB
【发布时间】:2012-04-18 00:43:52
【问题描述】:

我有一个包含一组矩阵的特征值的元胞数组。我已经从这个数组中的每个单元格中删除了第一个值,并将它们放在一个矩阵中。然后通过基于水印图像的一组阈值来操纵这些值。然后,我将值矩阵重新转换为元胞数组。我现在想将这些新单元格中的值放入旧数组中单元格的相应第一个位置。关于如何做到这一点的任何想法?我见过很多基于规则进行搜索和替换的方法,但没有一个只是简单地进行一对一替换。我只是希望这是可能的。

函数代码如下:(最后一行有问题)

    function D = fun(D,W)
    Q = 5;
    [i,j] = size(D)
    F = cellfun(@(c) c(1), D); % grab the first value from each cell
    disp(F); % Debug check
    for a = 1:i % Process the values
       for b = 1:j
       Z = mod(F(a,b),Q); 
         if W(a,b) == 0
             if Z<(3*Q)/4;
                F(a,b) = F(a,b)+Q/4-Z;
             else
                F(a,b) = F(a,b)+5*Q/4-Z;
             end 
         else 
             if Z<Q/4;
                F(a,b) = F(a,b)-Q/4+Z;
             else
                F(a,b) = F(a,b)+3*Q/4-Z;
             end
         end
      end
   end
   disp(F); % Debug check
   F = num2cell(F); % Make the new cell array
   disp(F); % Debug Check
   D{1,1} = cellfun(@(F) F{1,1}, F);    % No clue what to do here
   end

【问题讨论】:

    标签: arrays matlab image-processing watermark


    【解决方案1】:

    在我看来,您想要实现的最简单的解决方案如下:

        function D = fun(D,W)
        Q = 5;
        [i,j] = size(D)
        F = cellfun(@(c) c(1), D); % grab the first value from each cell
        disp(F); % Debug check
        for a = 1:i % Process the values
           for b = 1:j
           Z = mod(F(a,b),Q); 
             if W(a,b) == 0
                 if Z<(3*Q)/4;
                    F(a,b) = F(a,b)+Q/4-Z;
                 else
                    F(a,b) = F(a,b)+5*Q/4-Z;
                 end 
             else 
                 if Z<Q/4;
                    F(a,b) = F(a,b)-Q/4+Z;
                 else
                    F(a,b) = F(a,b)+3*Q/4-Z;
                 end
             end
             D{a,b}(1) = F(a,b)
          end
       end
    
       end
    

    所以我所做的只是将 F(a,b) 的值分配给 D{a,b} 的第一个元素,在循环中操作 F - 你可以这样做,因为 F 的元素无论如何都是独立的。 无论如何,使用 cellfun 这样的 matlab 内置函数并不总是比显式循环快。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多