Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static Img radonTransform(Img img, int res){
- img.forEachParallel(px->{
- int l = px.getLuminance();
- px.setRGB_preserveAlpha(l, l, l);
- });
- double imgDiagonal = Math.sqrt(img.getHeight()*img.getHeight()+img.getWidth()*img.getWidth())*2;
- Img radonImg = new Img(res, res);
- radonImg.forEachParallel(px-> {
- double a = px.getY()*Math.PI/res;
- double r = px.getXnormalized()-0.5;
- r*=2;
- double sum = 0;
- int numElements = 0;
- for(int i = 0; i < imgDiagonal; i++){
- double t = i*1.0/imgDiagonal;
- t -= 0.5;
- t*=2;
- double x = r*Math.cos(a)+t*Math.sin(a);
- double y = r*Math.sin(a)-t*Math.cos(a);
- x = (x+1)/2;
- y = (y+1)/2;
- if(inUnitRange(x) && inUnitRange(y)){
- sum += Pixel.getLuminance(img.interpolateARGB((float) x,(float) y))/255.0;
- numElements++;
- } else {
- // System.out.format("a:%.2f r:%.2f t:%.2f x:%.2f y:%.2f %n", a,r,t,x,y);
- }
- }
- sum /= Math.max(1, numElements);
- px.setRGB_fromNormalized((float)sum, (float)sum, (float)sum);
- });
- return radonImg;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement