The basic idea is to divide an image into non-overlapping blocks and then convert each Block to column vector to become a column in the resulting matrixThe problem is:1 - When you change the size of the block gives an error.2 - Is it possible to replace loop statements with other statements which can reduce the overhead computation in program.********* clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
fontSize = 20;% Read the image from disk.
m = imread('cameraman.tif');[rows columns ] = size(m);%prompt the user to input the size of rows & colums in block
prompt = {'Enter block row size:','Enter block column size:'};dlg_title = 'Input size of the block';num_lines = 1;def = {'8','8'};answer = inputdlg(prompt,dlg_title,num_lines,def);[val status] = str2num(answer{1}); %assign the user values to another variables
blockrow=val;blockcolumn=val;wholeBlockRows = floor(rows / blockrow);blockVectorR = [blockrow * ones(1, wholeBlockRows), rem(rows, blockrow)];wholeBlockCols = floor(columns / blockcolumn);blockVectorC = [blockcolumn * ones(1, wholeBlockCols), rem(columns, blockcolumn)];%convert the image into blocks
mCell = mat2cell(m, blockVectorR, blockVectorC);%now mCell contain all blocks
%convert each block to column vector then put the column vector as a column in new matrix n
t=1;for i=1:rows/blockrow for j=1:rows/blockrow thisBlock = mCell{i,j}; columnVector = thisBlock(:); n(:,t)=columnVector; t=t+1; endend
MATLAB: How i can remove the for statement from this program
image processingimage segmentation
Best Answer