Ask Your Question
0

Take every Nth element of a matrix

asked 2016-05-24 12:35:19 -0600

willoughby gravatar image

updated 2016-05-24 13:14:06 -0600

LBerger gravatar image

I am trying to create a block average filter of an image.

In Matlab my code looks like:

ba=4; %block average block size
B = ones(ba)/ba^2;
out1 = conv2(double(rgb_img(:,:,1))/255,B,'valid');
out1 = out1(1:ba:end,1:ba:end);
out2 = conv2(double(rgb_img(:,:,2))/255,B,'valid');
out2 = out2(1:ba:end,1:ba:end);
out3 = conv2(double(rgb_img(:,:,3))/255,B,'valid');
out3 = out3(1:ba:end,1:ba:end);

I know how to do the first step using filter2D how do I do the second step (take every 4th element)

edit retag flag offensive close merge delete

Comments

Please apply icon '101010' to your code to help reading

LBerger gravatar imageLBerger ( 2016-05-24 13:15:06 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
1

answered 2016-05-24 13:13:26 -0600

LBerger gravatar image

It's not exactly like in Matlab (for border pixel) :

   Mat a = Mat::zeros(16,10,CV_8UC1);
    int k=0;
    for (int i=0;i<a.rows;i++)
        for (int j=0;j<a.cols;j++)
            a.at<uchar>(i,j)=k++;
    Mat d;
    resize(a, d, Size(),0.25,0.25,INTER_NEAREST);
    cout<<a<<endl;
    cout<<d<<endl;

gives as result :

[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9;
  10,  11,  12,  13,  14,  15,  16,  17,  18,  19;
  20,  21,  22,  23,  24,  25,  26,  27,  28,  29;
  30,  31,  32,  33,  34,  35,  36,  37,  38,  39;
  40,  41,  42,  43,  44,  45,  46,  47,  48,  49;
  50,  51,  52,  53,  54,  55,  56,  57,  58,  59;
  60,  61,  62,  63,  64,  65,  66,  67,  68,  69;
  70,  71,  72,  73,  74,  75,  76,  77,  78,  79;
  80,  81,  82,  83,  84,  85,  86,  87,  88,  89;
  90,  91,  92,  93,  94,  95,  96,  97,  98,  99;
 100, 101, 102, 103, 104, 105, 106, 107, 108, 109;
 110, 111, 112, 113, 114, 115, 116, 117, 118, 119;
 120, 121, 122, 123, 124, 125, 126, 127, 128, 129;
 130, 131, 132, 133, 134, 135, 136, 137, 138, 139;
 140, 141, 142, 143, 144, 145, 146, 147, 148, 149;
 150, 151, 152, 153, 154, 155, 156, 157, 158, 159]
[  0,   4;
  40,  44;
  80,  84;
 120, 124]
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2016-05-24 12:35:19 -0600

Seen: 689 times

Last updated: May 24 '16