图像处理软件开发

2014-03-31 20:38:17 Linoi 阅读数 6271

专栏地址:http://blog.csdn.net/column/details/imagep.html

这一篇文章主要谈谈美肤操作。这个功能基本上很多软件都有,比如美图秀秀,女生们的最爱。

美肤的原理,简单来说,其实就是图像平滑操作,不过在这个平滑的过程中最好不能把轮廓给模糊掉。美图秀秀美肤操作的技术没公开,我这里就只谈谈采用双边滤波器实现美肤的技术。

关于双边滤波器的相关资料,在我的博文:《双边滤波器解析与代码》有介绍,这里我也就不浪费时间多讲,想进一步了解的可以去里面看看。

先看看美图秀秀的美肤效果:


原图如下:


现在看咱们自己的Code:【很简单,想修改的同学可以参看文献[1]提供的PCL代码】

void MainWindow::on_actionBeauty_triggered()
{
    cv::Mat face;

    int KERNEL_SIZE = 31;
    for (int i = 1; i < KERNEL_SIZE; i = i + 2)
    {
        bilateralFilter(image,face,i,i*2,i/2);
    }
    cv::namedWindow("Beauty");
    cv::imshow("Beauty",face);
}

效果图:



更多图像处理、机器学习资料,请关注博客:LinJM-机器视觉  微博:林建民-机器视觉

2005-04-28 22:19:00 persuper 阅读数 2703

    本系统的设计目标是开发一个从医学切片图像到有限元网格平台.当然这是导师的项目,不过系统架构和主要的编码还是由我作的.对这次开发过程中出现的问题以及最终解决问题的途径,我觉得还是比较有代表性的.

先介绍一下用户需求,其实就是导师脑袋里的想法结合我们的能力的东东了,编程技术不会太复杂,毕竟俺还是个学生,太复杂的东西是有风险的.

 1)将切片图像读取(以后还要增加读取三维图像),图像预处理(裁减,平滑),图像分割,三维重建,几何模型导出和有限元网格生成等功能模块有机结合在统一的用户界面下,提供简洁初始界面,使用户能轻松识别各个功能区。因为该软件面向对象是科研工作者的,所以都是采用英文界面(这里没有歧视非科技工作者的意识,这是导师的原话.我对该观点抱否定态度,但实话说英文注释和界面开发起来方便,至少不用考虑输入法切换和Unicode转换).

2)对从切片图像读取到有限元网格生成这样一系列功能的实现在具有流线型特征的同时应该是可回溯性。(这里的回溯性,是比较高级的东西.利用了ITK和VTK的管道机制.)

3)为了提高图像处理的效率,对裁减、分割、重建这样的主要功能,应该具有策略存取功能,从而实现自动化或半自动化。

4)实现不同分割或重建方法结果可视化比较。(学生可以使用该系统来实验各种分割算法,封装算法到该系统中;前提是对Itk的类结构有了解)

5)设计应该考虑界面功能模块的扩展和底层算法扩展。 


根据这样的目标,我们制定了系统的设计方案:

1)系统基于VC6.0+sp5.0开发,采用MFC + ITK + VTK结构完成程序的用户界面、图像处理和可视化机制。(移植到.Net的工作已经完成)

2)设计简约的系统界面,划分主要功能模块。功能模块主要包括数据处理模块、裁减模块、分割模块、分割过滤器模块、重建模块、表面模型平滑简化模块以及有限元网格划分模块等。

3)设计合理的数据流。实现各功能模块独立化,数据模块、处理模块和界面模块分离,提高系统的移植性。

4)在各功能模块之间可动态生成管道线。 
   等测试完毕,欢迎大家下载试用!

2018-11-13 18:11:02 weixin_41923961 阅读数 2666

 要写好一个图像处理软件,仅靠自己看书是完全不够的,要多方面学习,借鉴前人的经验,要集思广益、多面出击。如今网络发达,图像学的资料其实也到处都是。只是往往个人能力或精力有限,在短时间内无法找到那些也许藏于角落里的金子。本人研究图像至今也历时7年,在慢慢的摸索和累积中也找到了一些相关资料,共享给大家学习。

1、 最著名的开源图像软件:GIMP。

      开发语言:C

      GIMP号称Linux下的PhotoShop,总观其工程,确实达到了PhotoShop早期版本的功能。三大利器:选区、图层、蒙板一应俱全,滤镜也非常丰富,支持插件。缺点就是界面不美观,用户体验差,执行速度在Windows下慢(Linux下不清楚)。

      官方网址为:http://www.gimp.org/

      源码下载:因其源码体积过大,请大家直接到其官网下载。

      对应的可执行文件可在官方网站下载。

      界面预览:

 

2、 微软曾支持过的"开源"图像软件:Paint.NET。

      开发语言:C#

  Paint.NET是Windows 平台上的一个图像和照片处理软件,早期定位于MSPaint的免费替代软件,支持图层、通道、无限制的历史记录、特效和许多实用工具,在3.3版本之前开源,之后由于种种原因放弃开源。其界面看起来有点像Photoshop,执行速度上也不快。

      官方网站:http://www.getpaint.net/

      源码下载:http://files.cnblogs.com/Imageshop/Paint.net.rar

      界面预览:

 

 3、一个响当当的图像开源软件:ImageEditor 

     开发语言:JAVA

     一个用JAVA开发的图像处理软件,具有图层、选区、滤镜以及其他一些工具。整体来说较上述两个软件稍次一些,但依旧强劲。提供了很多独特的滤镜算法,工具箱中的透视变形工具很给力,是用JAVA开发图像值得借鉴的好代码。算法的执行速度一般。

      官方网址为:http://www.jhlabs.com/

      源码下载:http://files.cnblogs.com/Imageshop/jhlabs.rar

      源码中包含对应的EXE文件,但需要机器上安装了JAVA运行环境方可正常运行。

      界面预览:

 

4、优秀的图像操作类库: CxImage

     开发语言:C++

     它可以快捷地存取、显示、转换各种图像,自带了较多图像模式转换算法,以及一些滤镜,是VC使用者最为常用的图像类库。

     官方网址:http://www.codeproject.com/KB/graphics/cximage.aspx

     源码下载:http://files.cnblogs.com/Imageshop/cximage.rar

     界面预览:

 

5、国人的开源图像处理软件: Imagestone

     开发语言:C++ 

     ImageStone是一套功能强大的C++图像处理库,能读写JPG、GIF、PNG、TIFF、TGA等多种图像文件,有多达100多中预定义的特效。其算法很多是取自GIMP的代码,如果认为GIMP的代码过于复杂,可以从该软件中很轻松分解出你需要的部分。

      官方网址为:http://www.codeproject.com/KB/graphics/ImageStone.aspx

      源码下载:http://files.cnblogs.com/Imageshop/ImageStone.rar

      界面预览:

 

6、基于AForge.NET的开源软件:iplab

     开发语言:C#

     和CxImage似乎是一个作者,包含了很多滤镜,也有一些图像识别上常用的分析方法。

     官方网址为:http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx 

     源码下载:http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab/iplab_src.zip

     界面预览:

 

 

7、一款VB值得爱好者学习的软件:iBmp

      开发工具:VB6

      虽然在提供的算法上没有什么太多值得说明的地方,但在图像缩放的坐标计算、偏移、图像导航器方面的代码确实值得大家学习。

      官方网址为:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42376&lngWId=1

      源码下载:http://files.cnblogs.com/Imageshop/iBMP.rar

      界面预览:

 

8、图像编码解码的利器:FreeImage、ImageMagick

      开发语言:C

      FreeImage 是一款免费的、开源的、跨平台(Windows 、Linux 和Mac OS X )的,支持20 多种图像类型的(如BMP 、JPEG 、GIF 、PNG 、TIFF 等)图像处理库。其最大优点就是采用插件驱动型架构,具有快速、灵活、简单易用的特点,得到了广泛使用。

     ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。

 

9、其他的一些开源软件:

    (1) PhotoSprite:一个国产的用C#开发的类似PHOTOSHOP的软件(太抬举他了),用到了很多图形算法,新手可以参考。

     下载地址:http://files.cnblogs.com/Imageshop/PhotoSprite.rar

     (2)FilterExplorer: 一个小的VC写的图像处理代码,有一些比较好的滤镜代码。

     下载地址:http://files.cnblogs.com/Imageshop/FilterExplorer.rar

2014-03-31 11:34:33 Linoi 阅读数 5608

专栏地址:http://blog.csdn.net/column/details/imagep.html

本篇博客主要记录Image图像处理软件的基本图像处理,包括黑白图像、图像柔化、图像锐化。


图像黑白化

现在我们得到的大多数图像都是彩色图像,那么如果想要把它变成黑白图像,该怎么操作呢?

一个简单的方法就是——利用cvtColor实现。

cvtColor的原型如下:

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

在cvtColor中利用CV_BGR2GRAY, CV_RGB2GRAY就可以实现从RGB图像转换为黑白图像。

转换公式如下:

\text{RGB[A] to Gray:} \quad Y  \leftarrow 0.299  \cdot R + 0.587  \cdot G + 0.114  \cdot B


Code:

void MainWindow::on_actionBlackWhite_triggered()
{
    cv::Mat bw;
    cv::cvtColor(image,bw,CV_BGR2GRAY);
    QImage bimg = QImage((const uchar*)(bw.data),bw.cols,bw.rows,QImage::Format_Indexed8);
    ui->Imagedisplaylabel->setPixmap(QPixmap::fromImage(bimg));
    //ui->Imagedisplaylabel->setScaledContents(true);
    //ui->Imagedisplaylabel->resize(ui->Imagedisplaylabel->width(),ui->Imagedisplaylabel->height());

}


Example:


References:

彩色空间及cvtColor解析




图像柔化

图像柔化其实也就是图像模糊(平滑),算是一个非常简单的操作。


Code:

void MainWindow::on_actionSmooth_triggered()
{
    cv::Mat Smooth;
    cv::namedWindow("Ori");
    cv::imshow("Ori",image);
    cv::GaussianBlur(image,Smooth,cv::Size(5,5),5);
    cv::namedWindow("S");
    cv::imshow("S",Smooth);
}


Example:




图像锐化

所谓图像锐化就是要突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的识别。图像锐化是与图像平滑相反的一类处理。它主要分为:空域处理方法和频域处理方法。这里要讲的是类似Photoshop的unsharpe mask锐化,从概念上讲,unsharpe mask就是首先从原图上生成一个模糊拷贝,用原图减去这个拷贝,得到原图的边界,类似于经过一次高斯过滤查找到图像的边界。这个图像边界就是我们需要的mask。

整个锐化过程如下所示:


(上图改进方案见文献Image Enhancement via Adaptive Unsharp Masking

一个简单的实例:


Code:

void MainWindow::on_actionSharpe_triggered()
{
    cv::namedWindow("ori_s");
    cv::imshow("ori_s",image);
    cv::Mat sharpe;
    cv::GaussianBlur(image,sharpe,cv::Size(5,5),5);
    cv::addWeighted(image,1.5,sharpe,-0.6,0,sharpe);
    cv::namedWindow("sharpe");
    cv::imshow("sharpe",sharpe);
}

Example:


References:

SHARPENING: UNSHARP MASK

GUIDE TO IMAGE SHARPENING

Unsharp masking[Wikipedia]

利用unsharp mask锐化图像



更多图像处理资源,请关注博客:LinJM-机器视觉微博:林建民-机器视觉

2014-03-26 21:19:49 Linoi 阅读数 4128

专栏地址:http://blog.csdn.net/column/details/imagep.html

本系列博客主要记录Image_Lin图像处理软件的开发记录。

Image_Lin软件计划实现的功能包括:

(一)、基本图像处理(黑白、锐化、柔化、补光)

(二)、人像美容(人脸美肤)

(三)、图像特效(素描、油画、浮雕、怀旧、Lomo)

(四)、图像去雾

Image_Lin图像处理的开发工具是:QT+OpenCV


这一篇博客我主要对QT和OpenCV进行一个简单的介绍。


QT是一个跨平台的C++图形用户界面应用程序框架,首度为公众可用是在1995年5月。它最初由Haavard Nord和Eirik Chambe-Eng开发而成。当前最新的版本是Qt5.2,下载地址

一些关于QT的教程如下:

QT 编程基础入门到精通

Qt 学习之路 2

QT 学 习 

下面,我谈谈Qt的元对象系统

Qt的主要成就之一就是使用了一种机制对C++进行了扩展,并且使用这种机制创建了独立的软件组件。这些组件可以绑定在一起,但任何一个组件对于它所要连接的组件的情况事先一无所知。

这种机制称为元对象系统(meta-object system),它提供了关键的两项技术:信号-槽以及内省(introspection)。内省功能对于实现信号与槽是必需的,并且允许应用程序的开发人员在运行时获得有关QObject子类的“元信息”,包括一个含有对象的类名以及它所支持的信号和槽的列表。这一机制也支持属性和文本翻译,并且它也为QtScript模块奠定了基础。从Qt4.2开始,可以动态添加属性。

标准C++没有对Qt的元对象系统所需要的动态元信息提供支持。Qt通过提供一个独立的moc工具解决了这个问题,moc解析Q_OBJECT类的定义并且通过C++函数提供可供使用的信息。由于moc使用纯C++来实现它的所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。

这一机制是这样工作的:

  • Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall(),以及其他一些函数。
  • Qt的moc工具生成了用于由Q_OBJECT声明的所有函数和所有信号的实现。
  • 像connect()和disconnect()这样的QObject的成员函数使用这些内省函数来完成它们的工作。


OpenCV是一个基于开源发行的跨平台计算机视觉库,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

当前最新的版本是2.4.8,下载地址

一些入门教程:

OpenCV学习笔记:快速入门例程

OpenCV入门指南


更多图像处理、机器视觉资源请关注 博客:LinJM-机器视觉 微博:林建民-机器视觉