看了 ccrun(老妖)大侠关于“图像锐化处理”的文章,网址:http://www.ccrun.com/article/go.asp?i=102&d=ke372w,我根据他的锐化代码写了图像的还原代码,但不知为为什么总有偏差,还原不了,我也知道这应该是除数的问题,但不知如何改,谢谢了
void __fastcall TForm1::btnSharpeClick(TObject *Sender)
{
float degree=0.3;
int red,green,blue;
for(i=1;i<width-1;i++)
for(j=1;j<height-1;j++)
{
red=(rgb[i][j].r_color+degree*rgb[i-1][j-1].r_color)/(1+degree);//这是我改的
green=(rgb[i][j].g_color+degree*rgb[i-1][j-1].g_color)/(1+degree);//这是我改的
blue=(rgb[i][j].b_color+degree*rgb[i-1][j-1].b_color)/(1+degree);//这是我改的
red=min(255,max(0,red));
green=min(255,max(0,green));
blue=min(255,max(0,blue));
bitmap->Canvas->Pixels[i][j]=RGB (red,green,blue);
}
Image1- >Picture- >Bitmap- >Assign(bitmap);
}
这个是个不可逆的过程啊,楼主
按说他跟平滑是相反的,但是图像处理出来不会是一样的
你用公式反过来写是很离谱的吧,想想都知道了
一张图的所有颜色都变了,你怎么还能根据周围的点的颜色推回原来的颜色呢?
图像处理一帮只能给你提供某种效果,我们要做的是针对我们的需要利用某个算法使得图像尽可能达到我们的要求,但是一般是不可逆的,不然还想把模糊不清的图像还原吗?
肯定还原不了
个人以为,理论上是可以还原的。图像的处理,也只是把具体的某个点的颜色置换而已吧?如果这个置换的算法可逆,怎么不能还原呢?
至于“不然还想把模糊不清的图像还原吗?”这一句话,确实不错,但原因只是我们不知道造成正常图片模糊的原因。否则,还是可逆的。你也看过一些把模糊图片变得清晰点的东西吧?
说以我说一般啊,
但是可逆的算法有那些,偶没有见过
一旦对全局处理了,一般是回不去了,图像的运算无非是通过跟周边的点进行矩阵的运算
一个点以其他8个点或是更多个点有关联,但是这些点都变了怎么还能还原
无论多少个点与其关联。最终的措施还是处理这些点的颜色。既然要处理这个些点的颜色,那么一定有个算法与其对应,当然,我也是凭感觉讲,理论上的东西。实际上,要还原,确实并非易事