首頁>Program>source

我有一个256x256的圖像,我想將其划分為4个128x128的塊,並將它们尋址為A1到A4.現在,我想分別呼叫它们並對其进行一些操作.我知道可以使用 blkproc 功能-但究竟如何?

我给維兹威兹打電话吗 這樣吗?

blkproc

我用什麼代替"?",如何處理建立的4个塊?

B=blkproc(I,[4 4],?)
最新回復
  • 5月前
    1 #

    blockproc起 (以及已棄用的 blkproc )都是Image Processing Toolbox中的功能,我想我会添加一个基本的MATLAB解決方案,不需要其他工具箱...

    如果要將矩陣划分為子矩陣,一種方法是使用 mat2cell 分解矩陣並將每个子矩陣儲存在單元陣列的單元中.對於您的情况,語法如下所示:

    C = mat2cell(I, [128 128], [128 128]);
    

    C 現在是2 x 2單元格陣列,每个單元格儲存 I的128 x 128子矩陣 .如果要對每个單元執行操作,則可以使用功能 cellfun .例如,如果要取每个子矩陣中值的平均值,則可以執行以下操作:

    meanValues = cellfun(@(x) mean(x(:)), C);
    

    第一个引數是匿名函式的函式控制代碼,该函式首先將每个子矩陣整形為列向量,然後取均值.輸出是每个子矩陣的平均值的2×2矩陣.如果您將函式傳遞给 cellfun 為每个單元建立不同大小或型別的輸出,然後 cellfun 連線它们会遇到問题,並会引發錯誤:

    ??? Error using ==> cellfun
    Non-scalar in Uniform output, at index 1, output 1.
    Set 'UniformOutput' to false.
    

    如果添加 ..., 'UniformOutput', false);cellfun的通话結束 ,則在上述情况下的輸出將改為2 x 2單元格陣列,其中包含對每个子矩陣執行操作的結果。

  • 5月前
    2 #

    blockprocblkproc的新名稱 (已棄用).它可用於將功能應用於圖像中的每个塊.例如,如果您想將矩陣I划分為8x8的塊並計算每个塊的平均值,則可以這樣做:

    B=blockproc(I, [8 8], @(x) mean(x.data(:)));
    
    然後

    B是一个包含塊均值的矩陣。

    這裏要註意两件事:

      The specifier [8 8] 指定塊的size,而不是塊的number

      在傳遞给 blockproc的函式之外,您無法訪問自身的塊 .如果您自己需要塊,則必须按照Adrien的建議进行操作:

      A1=I(1:128, 1:128);
      A2=I(129:256, 1:128);
      A3=I(1:128, 129:256);
      A4=I(129:256, 129:256);
      

      当然,在實際程式中,您可能應该使用迴圈来完成此操作。

      p

      如果 myImage 是您的256x256圖片,不是吗

      image_top_left = myImage(1:128,1:128);
      image_top_right = myImage(1:128,129:256);
      image_bottom_left = myImage(129:256,1:128);
      image_bottom_right = myImage(129:256,129:256);
      

  • 5月前
    3 #

    最好让您的程式適用於所有尺寸的圖像,而不仅仅是256 * 256。

    [row, col]=size(your_image); mr = round(row/2); % median of rows mc = round(col/2); % median of columns % Now divide your image and call each of them separately and do what ever you want top_left = your_image(1:mr , 1:mc); top_right = your_image(1:mr , (mc+1):col); bot_left = your_image((mr+1):row , 1:mc); bot_right = your_image((mr+1):row , (mc+1):col); % final stage is to combining these parts again to return to its original shape Back_to_original = [top_left,top_right ; bot_left,bot_right];

    %hope這將對您有用.

  • c++:STL删除不能按預期工作吗?
  • iphone:如何从我的應用程式打開"設置"應用程式?