Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. void setPixel(const size_t& r, const size_t& c, grayvalue_t t){
  2.         assert(r<R() && c<C());
  3.         _pixels[r*C() + c]=t;
  4.     }
  5.     size_t getPixelTemp(const size_t& r, const size_t& c){
  6.         assert(r<R() && c<C());
  7.         return r*C() + c;
  8.     }
  9.     void medianFilter0(const size_t& radius, size_t flag) {
  10.         std::vector<grayvalue_t> temp(_pixels.size());
  11.         size_t i, j;
  12.         for (i = 0; i < R(); i++){
  13.             for (j = 0; j < C(); j++){
  14.                 grayvalue_t ans = calc_neighbors(radius,i,j,flag);
  15.                 temp[getPixelTemp(i,j)] = ans;
  16.             }
  17.         }
  18.         for (i = 0; i < R(); i++){
  19.             for (j = 0; j < C(); j++){
  20.                 setPixel(i, j, temp[getPixelTemp(i, j)]);
  21.             }
  22.         }
  23.     } // medianFilter0
  24.     grayvalue_t calc_neighbors(const size_t& radius, size_t i, size_t j,size_t flag){
  25.         std::vector<grayvalue_t> tempvec((2 * radius + 1)*(2 * radius + 1);
  26.         size_t ii,jj,neighbors_num = 0;
  27.         for (ii = i - radius; ii <= i + radius; ii++){
  28.             for (jj = j - radius; jj <= j + radius; jj++){
  29.                 if (isInside(ii,jj){
  30.                     tempvec[neighbors_num++] = getPixel(ii, jj);
  31.                 }
  32.             }
  33.         }
  34.         if (flag == 0)std::sort(tempvec.begin(), tempvec.begin() + neighbors_num);
  35.         else std::nth_element(tempvec.begin(), tempvec.begin() + neighbors_num);
  36.         return tempvec[(neighbors_num - 1) / 2];
  37.     }
  38.     bool isInside(size_t i, size_t j){
  39.         return i >= 0 && j >= 0 && i < R() && j < C();
  40.     }
  41.     void medianFilter1(const size_t& radius) {
  42.         medianFilter0(radius, 1);
  43.     } // medianFilter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement