egami
C++ Image Processing program
/homes/esi30/DCS339/coursework/src/Processes/order_statistic.cpp
Go to the documentation of this file.
00001 #include "../progress.hpp"
00002 #include "order_statistic.hpp"
00003 
00004 Image_unit* apply_order_statistic(const Image_unit *in, unsigned char radius, std::function<unsigned char(const std::vector<unsigned char>&)> select){
00005     Progress prog;
00006 
00007     Image_unit *out(new Image_unit(*in));
00008 
00009     std::vector<unsigned char> neighbors_red, neighbors_green, neighbors_blue;
00010     neighbors_red.reserve((radius*2+1)*(radius*2+1));
00011     neighbors_green.reserve((radius*2+1)*(radius*2+1));
00012     neighbors_blue.reserve((radius*2+1)*(radius*2+1));
00013     for(int y=0; y<static_cast<int>(out->height()); ++y){
00014         prog.advance(static_cast<double>(y)/out->height());
00015         for(int x=0; x<static_cast<int>(out->width()); ++x){
00016             neighbors_red.clear();
00017             neighbors_green.clear();
00018             neighbors_blue.clear();
00019             for(int dy=-static_cast<int>(radius); dy<=static_cast<int>(radius); ++dy)
00020                 for(int dx=-static_cast<int>(radius); dx<=static_cast<int>(radius); ++dx){
00021                     if(x+dx>=0 && x+dx<static_cast<int>(out->width()) && y+dy>=0 && y+dy<static_cast<int>(out->height())){
00022                         neighbors_red.push_back(in->red(y+dy, x+dx));
00023                         neighbors_green.push_back(in->green(y+dy, x+dx));
00024                         neighbors_blue.push_back(in->blue(y+dy, x+dx));
00025                     }
00026                 }
00027             std::sort(neighbors_red.begin(), neighbors_red.end());
00028             std::sort(neighbors_green.begin(), neighbors_green.end());
00029             std::sort(neighbors_blue.begin(), neighbors_blue.end());
00030             out->red(y, x, select(neighbors_red));
00031             out->green(y, x, select(neighbors_green));
00032             out->blue(y, x, select(neighbors_blue));
00033         }
00034     }
00035 
00036     return out;
00037 }
00038 
00039 namespace Processes{
00040     void order_statistic(){
00042     }
00043 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends