i've an image of size 185x256 and i've divided the image into discrete blocks having block rows 16 and block columns 16. when i access the blocks in a loop it says index exceeds matrix dimension...
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
the code is as follows:
in the following image it has 11 rows and 16 columns grayImage http://imageshack.us/photo/my-images/17/tanklb.jpg/
 grayImage=rgb2gray(Imread('tank.jpg'));
 whos grayImage
 [rows columns numberOfBands]=size(grayImage);
 blockSizeR = 16;% Rows in block.
 blockSizeC = 16; % Columns in block.
 wholeBlockRows = floor(rows / blockSizeR);
 wholeBlockCols = floor(columns / blockSizeC);
 fprintf('\nSize of whole block is %d %d\n\n',wholeBlockRows,wholeBlockCols); 
 blockNumber=1;
 for row = 1 : blockSizeR : rows
  for col = 1 : blockSizeC : columns
    row1 = row;
    row2 = row1 + blockSizeR - 1;
    row2 = min(rows, row2); 
               % Determine starting and ending columns.
    col1 = col;
    col2 = col1 + blockSizeC - 1;
    col2 = min(columns, col2); % Don't let it go outside the image.
    % Extract out the block into a single subimage.
    oneBlock = grayImage(row1:row2, col1:col2);
                glcm=graycomatrix(oneBlock,'NumLevels',16);
                disp(glcm);
                subplot(16,16,blockNumber);
                imshow(oneBlock);
        caption2 = sprintf('Block #%d\n of %d', blockNumber,256);
    title(caption2, 'FontSize', fontSize);
    %drawnow;
        blockNumber = blockNumber + 1;
    end
  end
i has total of 11 rows and 16 columns i.e 185x256 when i calculate the GLCM
i got the error as
         Index exceeds number of subplots.
can u tell me how to solve this error...
which line of code should i add to the above code so that it can work well...
i've to only deal with the size 185x256..i dont want to use the function imresize...
댓글 수: 1
  Image Analyst
      
      
 2013년 4월 10일
				You could solve this a lot faster than waiting for us if you learn the concepts here: http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/
채택된 답변
  Ahmed A. Selman
      
 2013년 4월 10일
        Just add
   clear
at the very top of the code. Also these issues:
Line 26: change (oneBlocl)  to   (oneBlock)
Line 30: define the variable (blocks)
Line 31: define (fontSize) in the title argument
perhaps you want to add the command
clc
inside the loops to clean the screen while running (makes run a little bit faster)
After I've made the above minor fixes, it worked fine.
댓글 수: 10
  Ahmed A. Selman
      
 2013년 4월 11일
				Sure Pammy, it is your code and I only tried to slightly modify it for you. Please do not hesitate if you needed further modifications. Regards.
  Ahmed A. Selman
      
 2013년 4월 11일
				But you used a smart technique in the original code, why not extending it if you want to change the block numbers?
Anyway, I've modified it a little bit further as below (works for any blockSizeR and blockSizeC) as:
... % the above lines are the same.
disp(glcm);
                if (blockNumber>blockSizeC*blockSizeR);return;end 
                subplot(blockSizeC,blockSizeR,blockNumber);
                imshow(oneBlock);
... % the rest of the code is the same.
notice the new (if) statement. I've tried the new modifications at
blockSizeR=10 and blockSizeC=16; 
blockSizeR=20 and blockSizeC=20; 
blockSizeR=11 and blockSizeC=11;
and all worked fine.
추가 답변 (1개)
  Walter Roberson
      
      
 2013년 4월 10일
        Your code does not define "rows" or "columns"
댓글 수: 6
  Walter Roberson
      
      
 2013년 4월 11일
				 subplotrows = ceil(rows / blockSizeR);
 subplotcols = ceil(columns / blockSizeC);
then use
subplot(subplotrows, subplotcols);
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



