I have the following MATLAB Code which I want to optimize.It's related to an image matrix (2D) which I want to filter.Though it is MATLAB code, the same problem would arise in C code.The problem is that I'm trying to access neighbors of the pixel which might cause problems at the boundaries of the image matrix.vWeightsCoeff = zeros((2 * numRows * numCols), 1);weightsIdx = -3;% Filterationfor iColIdx = 1:numCols    for iRowIdx = 1:numRows        if(mod((iRowIdx + iColIdx), 2) == 0)            continue;        end        weightsIdx = weightsIdx + 4;        refPixel = mOutputImage(iRowIdx, iColIdx);        if(iRowIdx < numRows)            relPixel1 = mOutputImage((iRowIdx + 1), iColIdx);            relWeight1 = vRangeTable(round((refPixel - relPixel1) * RANGE_RESOLUTION) + RANGE_CENTER_IDX);        else            relPixel1 = 0;            relWeight1 = 0;        end        if(iRowIdx > 1)            relPixel2 = mOutputImage((iRowIdx - 1), iColIdx);            relWeight2 = vRangeTable(round((refPixel - relPixel2) * RANGE_RESOLUTION) + RANGE_CENTER_IDX);        else            relPixel2 = 0;            relWeight2 = 0;        end        if(iColIdx < numCols)            relPixel3 = mOutputImage(iRowIdx, (iColIdx + 1));            relWeight3 = vRangeTable(round((refPixel - relPixel3) * RANGE_RESOLUTION) + RANGE_CENTER_IDX);        else            relPixel3 = 0;            relWeight3 = 0;        end        if(iColIdx > 1)            relPixel4 = mOutputImage(iRowIdx, (iColIdx - 1));            relWeight4 = vRangeTable(round((refPixel - relPixel4) * RANGE_RESOLUTION) + RANGE_CENTER_IDX);        else            relPixel4 = 0;            relWeight4 = 0;        end        weightsNormalizationFactor = PREDICT_NORMALIZATION_FACTOR / (relWeight1 + relWeight2 + relWeight3 + relWeight4);        relWeight1 = relWeight1 * weightsNormalizationFactor;        relWeight2 = relWeight2 * weightsNormalizationFactor;        relWeight3 = relWeight3 * weightsNormalizationFactor;        relWeight4 = relWeight4 * weightsNormalizationFactor;        mOutputImage(iRowIdx, iColIdx) = mOutputImage(iRowIdx, iColIdx) - ((relWeight1 * relPixel1) + (relWeight2 * relPixel2) + (relWeight3 * relPixel3)+ (relWeight4 * relPixel4));        vWeightsCoeff(weightsIdx:(weightsIdx + 3)) = [relWeight1; relWeight2; relWeight3; relWeight4];    endendJust to clarify the variables:mOutputImage is the image matrix.numCols and numRows are the matrix dimensions.  vWeightsCoeff is the vector of the weights.Since each pixel is related to 4 others yet working only on half the pixels its size is 2 times the number of pixels.Now, the questions are:Can I do something smart to go over the same pixels yet skip the first if which works like dividing the pixels as in chess board (White Black Board)?Can I do something to avoid the if which secures I'm not stepping out of boundaries and yet go through the same pixels?If someone comes which a completely different arrangement I will be open for that as well.
Avoiding boundaries if-cases when filtering image matrix
optimization;matrix;image;matlab