Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void setPixel(const size_t& r, const size_t& c, grayvalue_t t){
- assert(r<R() && c<C());
- _pixels[r*C() + c]=t;
- }
- size_t getPixelTemp(const size_t& r, const size_t& c){
- assert(r<R() && c<C());
- return r*C() + c;
- }
- void medianFilter0(const size_t& radius, size_t flag) {
- std::vector<grayvalue_t> temp(_pixels.size());
- size_t i, j;
- for (i = 0; i < R(); i++){
- for (j = 0; j < C(); j++){
- grayvalue_t ans = calc_neighbors(radius,i,j,flag);
- temp[getPixelTemp(i,j)] = ans;
- }
- }
- for (i = 0; i < R(); i++){
- for (j = 0; j < C(); j++){
- setPixel(i, j, temp[getPixelTemp(i, j)]);
- }
- }
- } // medianFilter0
- grayvalue_t calc_neighbors(const size_t& radius, size_t i, size_t j,size_t flag){
- std::vector<grayvalue_t> tempvec((2 * radius + 1)*(2 * radius + 1);
- size_t ii,jj,neighbors_num = 0;
- for (ii = i - radius; ii <= i + radius; ii++){
- for (jj = j - radius; jj <= j + radius; jj++){
- if (isInside(ii,jj){
- tempvec[neighbors_num++] = getPixel(ii, jj);
- }
- }
- }
- if (flag == 0)std::sort(tempvec.begin(), tempvec.begin() + neighbors_num);
- else std::nth_element(tempvec.begin(), tempvec.begin() + neighbors_num);
- return tempvec[(neighbors_num - 1) / 2];
- }
- bool isInside(size_t i, size_t j){
- return i >= 0 && j >= 0 && i < R() && j < C();
- }
- void medianFilter1(const size_t& radius) {
- medianFilter0(radius, 1);
- } // medianFilter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement