imadjust使用opencv实现

article/2025/9/25 2:25:21

实现函数功能

J = low_out +(high_out - low_out).* ((I - low_in)/(high_in - low_in)).^ gamma 


[cpp] view plain copy
print ?
  1. IplImage* ImageAdjust(IplImage *src, IplImage *dst,    
  2.           double low_in, double high_in,    
  3.           double low_out, double high_out, double gamma )    
  4. {    
  5.     double low2 = low_in*255;    
  6.     double high2 = high_in*255;    
  7.     double bottom2 = low_out*255;    
  8.     double top2 = high_out*255;    
  9.     double err_in = high2 - low2;    
  10.     double err_out = top2 - bottom2;    
  11.     
  12.     int x,y;    
  13.     double val0,val1,val2;    
  14.     
  15.     // intensity transform    
  16.     for( y = 0; y < src->height; y++) {    
  17.         for (x = 0; x < src->width; x++){    
  18.             val0 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels];     
  19.             val0 = pow((val0 - low2)/err_in,gamma)*err_out+bottom2;    
  20.             if(val0>255) val0=255;     
  21.         if(val0<0) val0=0;     
  22.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels]=(uchar)val0;    
  23.     
  24.         val1 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels+1];     
  25.             val1 = pow((val1- low2)/err_in, gamma)*err_out+bottom2;    
  26.             if(val1>255) val1=255;     
  27.             if(val1<0) val1=0;    
  28.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+1]=(uchar)val1;    
  29.     
  30.         val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2];     
  31.             val2 = pow((val2-low2)/err_in,gamma)*err_out+bottom2;    
  32.             if(val2>255) val2=255;     
  33.         if(val2<0) val2=0; // Make sure src is in the range [low,high]    
  34.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+2]=(uchar)val2;    
  35.         }    
  36.     }    
  37.     return 0;    
  38. }    
IplImage* ImageAdjust(IplImage *src, IplImage *dst,  double low_in, double high_in,  double low_out, double high_out, double gamma )  
{  double low2 = low_in*255;  double high2 = high_in*255;  double bottom2 = low_out*255;  double top2 = high_out*255;  double err_in = high2 - low2;  double err_out = top2 - bottom2;  int x,y;  double val0,val1,val2;  // intensity transform  for( y = 0; y < src->height; y++) {  for (x = 0; x < src->width; x++){  val0 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels];   val0 = pow((val0 - low2)/err_in,gamma)*err_out+bottom2;  if(val0>255) val0=255;   if(val0<0) val0=0;   ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels]=(uchar)val0;  val1 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels+1];   val1 = pow((val1- low2)/err_in, gamma)*err_out+bottom2;  if(val1>255) val1=255;   if(val1<0) val1=0;  ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+1]=(uchar)val1;  val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2];   val2 = pow((val2-low2)/err_in,gamma)*err_out+bottom2;  if(val2>255) val2=255;   if(val2<0) val2=0; // Make sure src is in the range [low,high]  ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+2]=(uchar)val2;  }  }  return 0;  
}  


测试代码:

[cpp] view plain copy
print ?
  1. int main()  
  2. {  
  3.     IplImage *src=cvLoadImage("d:/111.JPG",1);  
  4.     CvSize a;  
  5.     a.width=src->width;  
  6.     a.height=src->height;  
  7.     IplImage *dst = cvCreateImage(a,8,3);  
  8.     ImageAdjust(src, dst,    
  9.           0, 0.5,    
  10.           0.5, 1, 1)  ;  
  11.     Mat c = dst;  
  12.     imshow("ss",c);  
  13.     waitKey();  
  14.     return 0;  
  15. }  
int main()
{IplImage *src=cvLoadImage("d:/111.JPG",1);CvSize a;a.width=src->width;a.height=src->height;IplImage *dst = cvCreateImage(a,8,3);ImageAdjust(src, dst,  0, 0.5,  0.5, 1, 1)  ;Mat c = dst;imshow("ss",c);waitKey();return 0;
}
  

效果图 原图


EMGU CV 版本

[csharp] view plain copy
print ?
  1. private void imageAdjust(Image<Bgr,byte>src,Image<Bgr,byte>dst,double low_in, double high_in,  
  2.          double low_out, double high_out, double gamma)  
  3.        {  
  4.   
  5.            double low2 = low_in * 255;  
  6.            double high2 = high_in * 255;  
  7.            double bottom2 = low_out * 255;  
  8.            double top2 = high_out * 255;  
  9.            double err_in = high2 - low2;  
  10.            double err_out = top2 - bottom2;  
  11.   
  12.            int x, y;  
  13.            double val0, val1, val2;  
  14.   
  15.            // intensity transform    
  16.            for (y = 0; y < src.Height; y++)  
  17.            {  
  18.                for (x = 0; x < src.Width; x++)  
  19.                {  
  20.                     
  21.   
  22.                    val0 = src.Data[y, x, 0];  
  23.                    val0 =   Math.Pow((val0 - low2) / err_in, gamma) * err_out + bottom2;  
  24.                    if (val0 > 255) val0 = 255;  
  25.                    if (val0 < 0) val0 = 0;  
  26.                    dst.Data[y,x,0] = (byte)val0;  
  27.   
  28.   
  29.                    val1 = src.Data[y, x, 1];  
  30.                    val1 = Math.Pow((val1 - low2) / err_in, gamma) * err_out + bottom2;  
  31.                    if (val1 > 255) val1 = 255;  
  32.                    if (val1 < 0) val1 = 0;  
  33.                    dst.Data[y, x, 1] = (byte)val1;  
  34.   
  35.                    val2 = src.Data[y, x, 2];  
  36.                    val2 = Math.Pow((val2 - low2) / err_in, gamma) * err_out + bottom2;  
  37.                    if (val2 > 255) val2 = 255;  
  38.                    if (val2 < 0) val2 = 0; // Make sure src is in the range [low,high]    
  39.                    dst.Data[y, x, 2] = (byte)val2;  
  40.                }  
  41.            }  
  42.          
  43.   
  44.        }  
 private void imageAdjust(Image<Bgr,byte>src,Image<Bgr,byte>dst,double low_in, double high_in,double low_out, double high_out, double gamma){double low2 = low_in * 255;double high2 = high_in * 255;double bottom2 = low_out * 255;double top2 = high_out * 255;double err_in = high2 - low2;double err_out = top2 - bottom2;int x, y;double val0, val1, val2;// intensity transform  for (y = 0; y < src.Height; y++){for (x = 0; x < src.Width; x++){val0 = src.Data[y, x, 0];val0 =   Math.Pow((val0 - low2) / err_in, gamma) * err_out + bottom2;if (val0 > 255) val0 = 255;if (val0 < 0) val0 = 0;dst.Data[y,x,0] = (byte)val0;val1 = src.Data[y, x, 1];val1 = Math.Pow((val1 - low2) / err_in, gamma) * err_out + bottom2;if (val1 > 255) val1 = 255;if (val1 < 0) val1 = 0;dst.Data[y, x, 1] = (byte)val1;val2 = src.Data[y, x, 2];val2 = Math.Pow((val2 - low2) / err_in, gamma) * err_out + bottom2;if (val2 > 255) val2 = 255;if (val2 < 0) val2 = 0; // Make sure src is in the range [low,high]  dst.Data[y, x, 2] = (byte)val2;}}}


上面的代码对于大图运行效率低,下面我写个优化版的

代码如下:

[csharp] view plain copy
print ?
  1. private void imadjust(Image<Gray,byte> src)  
  2.        {  
  3.            double minV , maxV ;  
  4.            int [] minP = new int[2];  
  5.            int [] maxP = new int[2];  
  6.            CvInvoke.MinMaxIdx(src, out minV, out maxV, minP, maxP);  
  7.            Mat m = src.Mat;  
  8.            m.ConvertTo(m, Emgu.CV.CvEnum.DepthType.Cv32F);  
  9.            Mat n = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);  
  10.            MCvScalar p = new MCvScalar();  
  11.            p.V0 = 1.0/(maxV-minV);  
  12.            n.SetTo(p);  
  13.            Mat dst = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);  
  14.            CvInvoke.Multiply(m, n, dst);  
  15.            p.V0 = 255;  
  16.            n.SetTo(p);//设置矩阵为p.V0 的值  
  17.            CvInvoke.Multiply(dst, n, dst);  
  18.            pictureBox1.Image = dst.ToImage<Gray, byte>().ToBitmap();// 显示到pictureBox上  
  19.        }  
 private void imadjust(Image<Gray,byte> src){double minV , maxV ;int [] minP = new int[2];int [] maxP = new int[2];CvInvoke.MinMaxIdx(src, out minV, out maxV, minP, maxP);Mat m = src.Mat;m.ConvertTo(m, Emgu.CV.CvEnum.DepthType.Cv32F);Mat n = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);MCvScalar p = new MCvScalar();p.V0 = 1.0/(maxV-minV);n.SetTo(p);Mat dst = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);CvInvoke.Multiply(m, n, dst);p.V0 = 255;n.SetTo(p);//设置矩阵为p.V0 的值CvInvoke.Multiply(dst, n, dst);pictureBox1.Image = dst.ToImage<Gray, byte>().ToBitmap();// 显示到pictureBox上}

都是采用向量化(矢量化)编程方式,效率不会差,但是我是简单实现,假设输出为最小为0 最大值为255的情况,且gamma 为1时的情况

如果需要别的情形需要自己根据情况编写。

实现函数功能

J = low_out +(high_out - low_out).* ((I - low_in)/(high_in - low_in)).^ gamma 


[cpp] view plain copy
print ?
  1. IplImage* ImageAdjust(IplImage *src, IplImage *dst,    
  2.           double low_in, double high_in,    
  3.           double low_out, double high_out, double gamma )    
  4. {    
  5.     double low2 = low_in*255;    
  6.     double high2 = high_in*255;    
  7.     double bottom2 = low_out*255;    
  8.     double top2 = high_out*255;    
  9.     double err_in = high2 - low2;    
  10.     double err_out = top2 - bottom2;    
  11.     
  12.     int x,y;    
  13.     double val0,val1,val2;    
  14.     
  15.     // intensity transform    
  16.     for( y = 0; y < src->height; y++) {    
  17.         for (x = 0; x < src->width; x++){    
  18.             val0 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels];     
  19.             val0 = pow((val0 - low2)/err_in,gamma)*err_out+bottom2;    
  20.             if(val0>255) val0=255;     
  21.         if(val0<0) val0=0;     
  22.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels]=(uchar)val0;    
  23.     
  24.         val1 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels+1];     
  25.             val1 = pow((val1- low2)/err_in, gamma)*err_out+bottom2;    
  26.             if(val1>255) val1=255;     
  27.             if(val1<0) val1=0;    
  28.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+1]=(uchar)val1;    
  29.     
  30.         val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2];     
  31.             val2 = pow((val2-low2)/err_in,gamma)*err_out+bottom2;    
  32.             if(val2>255) val2=255;     
  33.         if(val2<0) val2=0; // Make sure src is in the range [low,high]    
  34.         ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+2]=(uchar)val2;    
  35.         }    
  36.     }    
  37.     return 0;    
  38. }    
IplImage* ImageAdjust(IplImage *src, IplImage *dst,  double low_in, double high_in,  double low_out, double high_out, double gamma )  
{  double low2 = low_in*255;  double high2 = high_in*255;  double bottom2 = low_out*255;  double top2 = high_out*255;  double err_in = high2 - low2;  double err_out = top2 - bottom2;  int x,y;  double val0,val1,val2;  // intensity transform  for( y = 0; y < src->height; y++) {  for (x = 0; x < src->width; x++){  val0 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels];   val0 = pow((val0 - low2)/err_in,gamma)*err_out+bottom2;  if(val0>255) val0=255;   if(val0<0) val0=0;   ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels]=(uchar)val0;  val1 = ((uchar*)(src->imageData+src->widthStep*y))[x*src->nChannels+1];   val1 = pow((val1- low2)/err_in, gamma)*err_out+bottom2;  if(val1>255) val1=255;   if(val1<0) val1=0;  ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+1]=(uchar)val1;  val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2];   val2 = pow((val2-low2)/err_in,gamma)*err_out+bottom2;  if(val2>255) val2=255;   if(val2<0) val2=0; // Make sure src is in the range [low,high]  ((uchar*)(dst->imageData+dst->widthStep*y))[x*src->nChannels+2]=(uchar)val2;  }  }  return 0;  
}  


测试代码:

[cpp] view plain copy
print ?
  1. int main()  
  2. {  
  3.     IplImage *src=cvLoadImage("d:/111.JPG",1);  
  4.     CvSize a;  
  5.     a.width=src->width;  
  6.     a.height=src->height;  
  7.     IplImage *dst = cvCreateImage(a,8,3);  
  8.     ImageAdjust(src, dst,    
  9.           0, 0.5,    
  10.           0.5, 1, 1)  ;  
  11.     Mat c = dst;  
  12.     imshow("ss",c);  
  13.     waitKey();  
  14.     return 0;  
  15. }  
int main()
{IplImage *src=cvLoadImage("d:/111.JPG",1);CvSize a;a.width=src->width;a.height=src->height;IplImage *dst = cvCreateImage(a,8,3);ImageAdjust(src, dst,  0, 0.5,  0.5, 1, 1)  ;Mat c = dst;imshow("ss",c);waitKey();return 0;
}
  

效果图 原图


EMGU CV 版本

[csharp] view plain copy
print ?
  1. private void imageAdjust(Image<Bgr,byte>src,Image<Bgr,byte>dst,double low_in, double high_in,  
  2.          double low_out, double high_out, double gamma)  
  3.        {  
  4.   
  5.            double low2 = low_in * 255;  
  6.            double high2 = high_in * 255;  
  7.            double bottom2 = low_out * 255;  
  8.            double top2 = high_out * 255;  
  9.            double err_in = high2 - low2;  
  10.            double err_out = top2 - bottom2;  
  11.   
  12.            int x, y;  
  13.            double val0, val1, val2;  
  14.   
  15.            // intensity transform    
  16.            for (y = 0; y < src.Height; y++)  
  17.            {  
  18.                for (x = 0; x < src.Width; x++)  
  19.                {  
  20.                     
  21.   
  22.                    val0 = src.Data[y, x, 0];  
  23.                    val0 =   Math.Pow((val0 - low2) / err_in, gamma) * err_out + bottom2;  
  24.                    if (val0 > 255) val0 = 255;  
  25.                    if (val0 < 0) val0 = 0;  
  26.                    dst.Data[y,x,0] = (byte)val0;  
  27.   
  28.   
  29.                    val1 = src.Data[y, x, 1];  
  30.                    val1 = Math.Pow((val1 - low2) / err_in, gamma) * err_out + bottom2;  
  31.                    if (val1 > 255) val1 = 255;  
  32.                    if (val1 < 0) val1 = 0;  
  33.                    dst.Data[y, x, 1] = (byte)val1;  
  34.   
  35.                    val2 = src.Data[y, x, 2];  
  36.                    val2 = Math.Pow((val2 - low2) / err_in, gamma) * err_out + bottom2;  
  37.                    if (val2 > 255) val2 = 255;  
  38.                    if (val2 < 0) val2 = 0; // Make sure src is in the range [low,high]    
  39.                    dst.Data[y, x, 2] = (byte)val2;  
  40.                }  
  41.            }  
  42.          
  43.   
  44.        }  
 private void imageAdjust(Image<Bgr,byte>src,Image<Bgr,byte>dst,double low_in, double high_in,double low_out, double high_out, double gamma){double low2 = low_in * 255;double high2 = high_in * 255;double bottom2 = low_out * 255;double top2 = high_out * 255;double err_in = high2 - low2;double err_out = top2 - bottom2;int x, y;double val0, val1, val2;// intensity transform  for (y = 0; y < src.Height; y++){for (x = 0; x < src.Width; x++){val0 = src.Data[y, x, 0];val0 =   Math.Pow((val0 - low2) / err_in, gamma) * err_out + bottom2;if (val0 > 255) val0 = 255;if (val0 < 0) val0 = 0;dst.Data[y,x,0] = (byte)val0;val1 = src.Data[y, x, 1];val1 = Math.Pow((val1 - low2) / err_in, gamma) * err_out + bottom2;if (val1 > 255) val1 = 255;if (val1 < 0) val1 = 0;dst.Data[y, x, 1] = (byte)val1;val2 = src.Data[y, x, 2];val2 = Math.Pow((val2 - low2) / err_in, gamma) * err_out + bottom2;if (val2 > 255) val2 = 255;if (val2 < 0) val2 = 0; // Make sure src is in the range [low,high]  dst.Data[y, x, 2] = (byte)val2;}}}


上面的代码对于大图运行效率低,下面我写个优化版的

代码如下:

[csharp] view plain copy
print ?
  1. private void imadjust(Image<Gray,byte> src)  
  2.        {  
  3.            double minV , maxV ;  
  4.            int [] minP = new int[2];  
  5.            int [] maxP = new int[2];  
  6.            CvInvoke.MinMaxIdx(src, out minV, out maxV, minP, maxP);  
  7.            Mat m = src.Mat;  
  8.            m.ConvertTo(m, Emgu.CV.CvEnum.DepthType.Cv32F);  
  9.            Mat n = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);  
  10.            MCvScalar p = new MCvScalar();  
  11.            p.V0 = 1.0/(maxV-minV);  
  12.            n.SetTo(p);  
  13.            Mat dst = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);  
  14.            CvInvoke.Multiply(m, n, dst);  
  15.            p.V0 = 255;  
  16.            n.SetTo(p);//设置矩阵为p.V0 的值  
  17.            CvInvoke.Multiply(dst, n, dst);  
  18.            pictureBox1.Image = dst.ToImage<Gray, byte>().ToBitmap();// 显示到pictureBox上  
  19.        }  
 private void imadjust(Image<Gray,byte> src){double minV , maxV ;int [] minP = new int[2];int [] maxP = new int[2];CvInvoke.MinMaxIdx(src, out minV, out maxV, minP, maxP);Mat m = src.Mat;m.ConvertTo(m, Emgu.CV.CvEnum.DepthType.Cv32F);Mat n = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);MCvScalar p = new MCvScalar();p.V0 = 1.0/(maxV-minV);n.SetTo(p);Mat dst = new Mat(m.Size,Emgu.CV.CvEnum.DepthType.Cv32F,1);CvInvoke.Multiply(m, n, dst);p.V0 = 255;n.SetTo(p);//设置矩阵为p.V0 的值CvInvoke.Multiply(dst, n, dst);pictureBox1.Image = dst.ToImage<Gray, byte>().ToBitmap();// 显示到pictureBox上}

都是采用向量化(矢量化)编程方式,效率不会差,但是我是简单实现,假设输出为最小为0 最大值为255的情况,且gamma 为1时的情况

如果需要别的情形需要自己根据情况编写。


http://chatgpt.dhexx.cn/article/QYAIWVhE.shtml

相关文章

python实现matlab stretchlim函数和imadjust函数

matlab 代码&#xff1a; [img,map]imread(“/home/zhongjia/test.png”); LOW_HIGHstretchlim(img); Jimadjust(img,[LOW_HIGH(1) LOW_HIGH(2)],[0 1],1); imwrite(J,"/home/zhongjia/test_result.png"); 实现功能是&#xff1a;对16位深度1024*1024大小的test.…

MATLAB图像处理imadjust()函数调节图像的对比度示例

imadjust()函数 Jimadjust(I) 将强度图像为I的值映射到J中的新值&#xff0c;使得1&#xff05;的数据在低强度和高强度I时饱和。这将增加了输出图像J的对比度。 J imadjust&#xff08;I&#xff0c;[LOW_IN; HIGH_IN]&#xff0c;[LOW_OUT; HIGH_OUT]&#xff09;将强度图…

matlab常用语句imadjust作用,matlab中imadjust函数的作用及应用举例

imadjust简介 imadjust是一个计算机函数&#xff0c;该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入&#xff1a; doc imadjust或者help imadjust就行了获得该函数的帮助信息&#xff0c; 键入type imadjust可以查看函数的源码。 调用格式&#…

matlab imadjust函数,imadjust从用法到原理—Matlab灰度变换函数之一

imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in high_in],[low_out high_out],gamma) (注:本文所述图像数据均为Uint8,对于Matlab,矩阵中的一个元素即是一个像素点) 该函数的意义如图1所示,把图像f灰度变换到新图像f1的过程中,f…

matlab imadjust函数,浅析matlab中imadjust函数

imadjust imadjust是一个计算机函数&#xff0c;该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入&#xff1a; doc imadjust或者help imadjust即可获得该函数的帮助信息&#xff0c; 键入type imadjust可以查看函数的源代码。 函数功能&#xff1…

matlab图像灰度调整——imadjust函数的使用

在MATLAB中&#xff0c;通过函数imadjust&#xff08;&#xff09;进行图像灰度的调整&#xff0c;该函数调用格式如下&#xff1a; Jimadjust( I ) 对图像I进行灰度调整 Jimadjust( I&#xff0c;[low_in;high_in]&#xff0c;[low_out;high_out]) [low_in;high_in]为原图像…

matlab——imadjust函数

作用&#xff1a; 对进行图像的灰度变换&#xff0c;即调节灰度图像的亮度或彩色图像的颜色矩阵。 格式&#xff1a; g imadjust(f,[low_in; high_in],[low_out; high_out]) 将图像I中的亮度值映射到J中的新值。即将low_in至high_in之间的值映射到low_out至high_out之间的值。…

4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)

4.3 Python图像处理之图像恢复-无约束滤波器&#xff08;逆滤波&#xff09;、有约束滤波器&#xff08;维纳滤波器&#xff09; 文章目录 4.3 Python图像处理之图像恢复-无约束滤波器&#xff08;逆滤波&#xff09;、有约束滤波器&#xff08;维纳滤波器&#xff09;1 算法原…

MATLAB图像的恢复

一、实验类型&#xff1a;验证性实验 二、实验目的 1. 掌握退化模型的建立方法。 2. 掌握图像恢复的基本原理。 三、实验设备&#xff1a;安装有MATLAB 软件的计算机 四、实验原理 一幅退化的图像可以近似地用方程gHfn 表示&#xff0c;其中g 为图像&#xff0c;H为变形算…

图像恢复 Restormer: 彻底理解论文和源代码 (注释详尽)

文章目录 1. Restormer 论文2. Restormer 网络结构2.1 整体框架2.2 MDTA2.3 GDFN 3. 主要代码理解3.1 MDTA3.2 GDFN3.3 TransformerBlock3.4 一个测试实例 参考文献结语与思考 1. Restormer 论文 主要工作&#xff1a; [1] MDTA (Multi-Dconv Head Transposed Attention), 聚合…

【去噪去模糊去雨】Multi-Stage Progressive Image Restoration 多阶段渐进式通用图像恢复【CVPR2021】

论文&#xff1a;【CVPR2021】Multi-Stage Progressive Image Restoration 多阶段渐进式通用图像恢复 参考&#xff1a;多阶段渐进式图像恢复 | 去雨、去噪、去模糊 | 有效教程&#xff08;附源码&#xff09;|【CVPR 2021】 1. 研究问题&#xff1a; 图像恢复领域&#xff0c…

图像恢复及滤波处理

图像恢复及滤波处理 1.基本概念&#xff1a; a.图像恢复是通过计算机处理&#xff0c;对质量下降的图像加以重建或恢复的处理过程。因摄像机与物体相对运动、系统误差、畸变、噪声等因素的影响&#xff0c;使图像往往不是真实景物的完善映像。在图像恢复中&#xff0c;需建立造…

CVPR 2020 论文大盘点-图像增强与图像恢复篇

本文继上一篇 CVPR 2020 论文大盘点-去雨去雾去模糊篇 之后,继续盘点CVPR 2020 中低层图像处理技术,本篇聚焦于图像视频的增强与恢复,含如下四个方向: 图像与视频增强(Image&Video Enhancement)7 篇 图像恢复(Image Restoration )5 篇 图像与视频去噪(Image&V…

pytorch: 图像恢复问题的代码实现详解(derain,dehaze,deblur,denoise等通用)

文章目录 前言数据集训练数据集评估数据集测试数据集 网络模型自定义工具包网络训练和测试结语 前言 图像恢复是一类图形去噪问题的集合&#xff0c;在深度学习中可以理解为监督回归问题&#xff0c;主要包括图像去雨、图像去雾、图像去噪&#xff0c;图像去模糊和图像去马赛克…

图像恢复 SWinIR : 彻底理解论文和源代码 (注释详尽)

文章目录 1. SwinIR 论文2. SWinIR 网络结构2.1 整体框架2.2 浅层特征提取2.3 深层特征提取2.4 图像重建模块 3. 主要代码理解3.1 SwinIR3.2 MLP3.3 Patch Embedding3.4 Window Attention3.5 残差 Swin Transformer 块 (RSTB)3.6 HQ Image Reconstruction3.7 一个测试实例 4. 参…

基于张量分解的遥感图像恢复及常用高光谱遥感数据集

本文为初期学习总结&#xff0c;本篇文章总结了遥感高光谱图像研究背景、高光谱图像噪声的分类&#xff0c;介绍了基于张量的图像恢复方法及近年来对于张量分解的相关研究&#xff0c;总结了几个常用的图像评价指标&#xff0c;总结了高光谱遥感图像常用的数据集。仍有很多不足…

【CVPR2021】Multi-Stage Progressive Image Restoration 多阶段渐进式通用图像恢复

首发于jwxie.cn Multi-Stage Progressive Image Restoration &#x1f517; PDF Link &#x1f37a; Github Code Section 1 介绍 图像恢复是一个从低质量的图像恢复出高清图像的任务。典型的低质量因素有噪声&#xff0c;模糊&#xff0c;水滴噪声&#xff0c;雾噪声等。这…

CVPR2022-图像恢复重建Restormer论文解读

CVPR2022文献解读之Restormer 图像恢复重建&#xff1a; Restormer: Efficient Transformer for High-Resolution Image Restoration 原文传送&#xff1a; https://arxiv.org/abs/2111.09881 官方源码&#xff1a;https://github.com/swz30/Restormer 文章目录 CVPR2022文献解…

扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码

文章目录 1. 去噪扩散概率模型2. 前向扩散3. 反向采样3. 图像条件扩散模型4. 可以考虑改进的点5. 实现代码 话不多说&#xff0c;先上代码&#xff1a; 扩散模型diffusion model用于图像恢复完整可运行代码&#xff0c;附详细实验操作流程 令外一篇简化超分扩散模型SR3来实现图…

Matlab维纳滤波图像恢复

点击查看&#xff1a;Matlab维纳滤波图像恢复 文件大小&#xff1a;2.8M 操作系统&#xff1a;Windows10旗舰版 开发工具&#xff1a;Matlab2016、2018、2020 开发语言&#xff1a;.m 简要概述&#xff1a; Matlab维纳滤波图像恢复