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

专栏地址: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-机器视觉微博:林建民-机器视觉

2018-10-29 18:45:30 lgyuWT 阅读数 412

选定的图像,图形或物体,对待处理的图像进行遮挡,来控制图像处理的区域或处理过程。用于覆盖特定图像或物体称为掩模或模板。光学图像处理中,掩模可以做胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。

数字图像处理中,图像掩模主要用于:

  1. 提取感兴趣区,用预先制作的感兴趣区掩模与待处理图想相乘,得到感兴趣图像,感兴趣内图像值保持不变,而区外图像值都为0.
  2. 屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数计算,或进队屏蔽区做处理统计。
  3. 结构特征提取,用相似性变量或图像匹配方法检测和图像中与淹没相似的结构特征。
  4. 特殊形状图像的制作。用选定的图像、图形或物体,对待处理的图像进行遮挡,来控制图像处理的区域或处理过程。用于覆盖特定的特定图像或物体称为掩模或模板。

掩模是一种图像滤波的模板,实用掩模经常处理的是遥控图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩模。

2017-09-23 14:05:42 hhy_csdn 阅读数 1917
写在前面:本教程由西安电子科技大学 电子工程学院 全光吉教授学院选修课《视频图像处理》英文讲稿修改而来。本博客做了相关内容的翻译和些许修改。在必要的地方对教程涉及到的代码进行了解释。

Chapter 1 Introduction

一、课本与参考书籍
《Introduction to Digital Image Processing with MATLAB》
PDF版下载链接:http://download.csdn.net/download/ZhuolovLing/1715334
《Digital Image Processing》
PDF版下载链接:
https://www.ebookee.net/Digital-Image-Processing-3rd-Edition_1863898.html

二、正式开始:如何衡量图像处理的好坏程度

2.1客观评价标准

引入概念:
MSE(Mean Squared Error)均方误差
均方误差公式

PSNR(Peak Signal to Noise Ration)峰值信噪比
峰值信噪比的计算
通常在经过影像压缩之后,输出的影像通常都会有某种程度与原始影像不一样。为了衡量经过处理后的影像品质,我们通常会参考PSNR 值来认定某个处理程序够不够令人满意。
有关峰值信噪比的详细知识可以在下面的网站得到:
http://fengzirufengsifeng.blog.163.com/blog/static/2182150222013467127148/

2.2主观评价标准

引入概念:

结构相似性 SSIM(Structure Similarity)

结构相似性的计算公式

结构相似性是一种衡量两张图片相似性的评价指标,通常评价的两张图片,一张是未经处理的原始图片,另一张是经过图像处理的失真图片。SSIM在衡量图片质量方面有着出色的表现,详情可以参考百度百科:https://baike.baidu.com/item/SSIM/2091025?fr=aladdin

三、 图像处理的应用

图像处理都有哪些应用呢?
图像锐化(Image Sharpening)
图像去噪(noise removal)
图像超分辨(Super Resolution)
图像边缘检测(edge-detection)
等等

四、 图像采样与数字图像的获取

在做数字图像处理之前,我们首先要获得一份数字图像的样本。
4.1 信号的采样
我们首先来复习一下关于信号采样的相关知识。
对于一个一维连续信号,比如随时间变化的正弦信号
x(t) = sin(t)
第一次,在一个周期内取10个采样点,第二次,在一个周期内取100个采样点。之后我们将采到的数据点画出来,并将其看做是对原始信号的一个复原。常识告诉我们,在一个周期内采100个点有很大概率比采10个点的效果要好得多。
前人已经将采样信号能否复原原始信号的规律总结了出来,即奈奎斯特采样定律:若要完全复原原始信号,采样的频率至少要为信号最大频率的2倍。
详细介绍在奈奎斯特定理

4.2 低通滤波器
下面介绍低通滤波器(Low-pass filter LPF)。
低通滤波器允许频率低于截止频率(cutoff frequency)的信号通过,并将高于截止频率的信号以相应的衰减。低通滤波器的频率响应将取决于它的具体设计。低通滤波器在音频处理领域通常还被叫做高截止滤波器或三倍截止滤波器。此外,低通滤波器是高通滤波器的组成之一。
低通滤波器

4.3 数字图像的获取
CCD 相机
平板扫描仪(Flat-Bed Scanner)
X射线成像与计算机断层成像(CT)
X射线成像

4.4 数字图像的数学描述

我们或许可以把一张平面图片想象成一个二元函数 f(x,y)。一个(x,y)有序实数对可以确定图像上任意一点,它确定的函数值代表了该处像素值的明暗程度,它可是以任意的正实数。
当然我们考虑到任意的实数所占的空间实在是太大了,对于计算机处理可能并不是一个好主意,而且将函数区间分的无限小似乎也没有太多必要,因为无论是人类的视觉辨识能力或者计算机的处理精度都是有上限的。
通常来说,我们倾向于将像素值的明暗程度等分到某一个合适的区间(即,做一系列离散采样),既不太影响计算机处理的精度,也不会对人们的视觉感受造成太大的失真。
比如,对于灰度图片来说(灰度图片的像素点在纯黑和纯白之间变化,没有别的颜色),我们常采取这样的方案:

0.0 (black), 0.003921, 0.007843, … , 1.0 (white)

0/255 (black), 1/255, 2/255, …, 255/255 (white)

0 (black), 1, 2, …, 255 (white)

即f(x,y) 的值只取1到256之间的整数,而且像素点从0(全黑)变化到255(全白)。这样做的好处之一就是每个点的像素值用一个字节(Byte)8个bit就可以表示。
这里写图片描述
这是对上图所做的离散化处理并用MATLAB画出f(x,y)的函数图像。
这里写图片描述

因此,我们可以认为,数字图像就是原始图像采样点组成的一个大矩阵。矩阵中的每个元素成为一个像素(Pixel)。
这里写图片描述

4.5 低通滤波器的MATLAB实现
先占坑,勘察好资源再写

五、再谈图像处理领域分类

5.1 图像增强

5.1.1 图片锐化、散焦图片的去模糊
5.1.2 边缘高亮标注
5.1.3 增强图像对比度、高亮度处理
5.1.4 图像去噪

5.2 图像重构(图像修复)

5.2.1 图像去模糊,由线性运动造成
5.2.2 去光学畸变
5.2.3 去周期性噪声

图像去雨(deraining)
去隔行(deinterlacing)
去马赛克(demosaicking)
图像超分辨(super-resolution)
图像分割(Image Segmentation)

2017-07-27 20:52:45 u010460650 阅读数 2363

       形态学图像处理是指从图像中提取一些“内涵”,也就是一些想得到的属性。形态学处理的数学工具是集合论,在冈萨雷斯的书中研究对象以后两种一种是二值图像,一种是灰度图像。
       在在二值图像中中主要有膨胀和腐蚀两种基础操作,大多数形态学算法都是基于膨胀和腐蚀这两种。不管那种操作都需要用到一种处理的工具,这种工具定义了如何对图像进行腐蚀,在图像处理中这种工具被称为结构元(structure element),就相当与一种探测器,探测到的部分都要进行腐蚀或者膨胀,不同的结构元对同一种图像处理的结果不同。

1.二值图像操作

1.1腐蚀与膨胀

     利用结构元对图像进行腐蚀,对图像进行探测,如果结构元探测的区域内包含所有的前景色,那么就用前景色像素点替换中心位置的点(或者说不作改变),如果结构元探测的区域内包不全包含前景色,那么就用背景色取代该点(或者说做出取反的改变)。

1.2开操作与闭操作

     开操作是指先腐蚀后膨胀,容易消去一些较小的细节。如断开较细的连接,消除细的突出物。有一定的平滑效果。
     闭操作是指先膨胀后腐蚀,容易弥补一些较小的细节。如弥合较窄的间断,消除较小的孔洞。

1.3击中或击不中变换

     这是一个形状检测的一个工具,旨在用结构元去图像中检测与结构元结构完全一致的图像。

2一些基于二值图像的节本操作

2.1边界提取

       原图像-腐蚀过后的图像产生边界

2.2孔洞填充

       条件膨胀

2.3提取连通分量

       条件膨胀

2.4 凸壳

       利用有凸性特质的结构元组对图像进行有条件的膨胀,最后达到凸形

2.5细化

2.6粗化

2.7骨架

2.8裁剪

2.9形态学重建

  • 侧地膨胀和腐蚀
           利用模版对标记图像进行有约束的膨胀或者腐蚀,这里的模板图像就像是一个限定器,按照这个模板对图像进行条件的膨胀或者腐蚀。
    • 重建开操作与重建闭操作

      开操作中,腐蚀会删除较小的物体,而膨胀会恢复一流物体的形>状,然而恢复的准确性高度依赖物体的形状和所用结构员的相似性,但重建开操作可以正确恢复腐蚀后的物体形状。 — 《数字图像处理》 冈萨雷斯


     之所以能够比较正确的恢复腐蚀后的物体形状,这是因为在腐蚀之后有测地膨胀,测地膨胀可以依靠原图像作为模板来进行条件膨胀,从而达到与原图想一致的效果。
  • 填充空洞
  • 边界清除

3灰度级形态学

3.1膨胀与腐蚀

      与二值图像不一样,灰度级的图像再利用SE(结构元)进行腐蚀或者膨胀时,使用的最大值灰度和最小值灰度替代。用SE探测区域,膨胀用最大值(最亮的点)替换中心点,腐蚀是用最小值(最暗的点)替换中心点。

3.2开操作和闭操作

      开操作就是先腐蚀后膨胀,灰度级开操作能让图像的亮点变得平滑,也就是变暗。灰度级闭操作能让图像的暗点变得更平滑, 也就是变得额更亮。有变化的点一般比结构元小。

4一些基于灰度级图像的算法操作

4.1形态学平滑

      利用灰度级开操作抑制亮点和闭操作抑制暗点的操作对图像进行平滑处理

4.2形态学梯度

      膨胀减去腐蚀得到边缘/轮廓(就是变化幅度比较的大的那部分)

4.3顶帽变化和底帽变化

      顶帽变化的名字很形象化,开操作会抑制亮的区域(这个区域比结构元小),在灰度级图像的三维表达中(灰度的大小为Z轴,坐标为XY轴),表现为一个平滑的凸曲线被消去了一部分,消去的这部分像一个帽子,所以就叫做顶帽变换,我猜的哈哈。底帽同理。其实就是来求消去的图像亮区域。
顶帽变化的一个重要途经是用来消除不均匀光照的,比如一副图像里面有多物体,用比这些物体都大的结构元,做一次顶帽变换,那么光照就变得相对均匀,首先比这些物体都大,那么这些物体就会被开操作删除掉,然后就剩下了不均匀的背景,然后用原图像减去这些不均匀的北京那么,这些物体就可以比较合适的处理。

4.4粒度检测

      可以用来判断图像中颗粒尺寸分布的领域。如可以利用一组逐级增大的结构元(这些结构员与颗粒应该是具有相似性的)进行一次次的顶帽*(或者底帽)变化,这时的“帽子”大小就与消除的颗粒大小具有某种联系喽。

4.5纹理分割

4.6灰度级形态学重建

  • 侧地膨胀和侧地腐蚀
         利用模版对图像进行有约束的膨胀和腐蚀。这里的模版图像用来限定操作的结果。

  • 重建开操作和重建闭操作

  • 重建顶帽和重建底帽
  • -
2017-10-03 00:33:06 hhy_csdn 阅读数 6869

图像处理的MATLAB基础

一、MATLAB在图像处理领域的优点

优秀的矩阵运算能力

图像处理教程(一) 中我们提到每一张图片都可以看做是一个由像素点组成的矩阵,黑白图片用一个二维矩阵就可以表示,彩色图片则要用三个二维矩阵,分别表示RGB三个颜色通道。

而MATLAB是十分擅长处理矩阵运算的科学计算软件,所以MATLAB处理图像信息就格外方便。

例如:一维向量可以表示为声音信号在时域上的离散采样信息,即可以表示一个声音信号;二维矩阵自然可以表示图像信息。

MATLAB内置了许多函数可以对矩阵做各样的处理,如sum()函数,mean()函数,imread(),imwrite()函数等等。

友好的编程语言与操作界面

不像其他高级语言(如C语言),在使用变量前必须预先定义变量,声明其数据类型,MATLAB可以直接对任意变量展开操作而不需要预先声明,MATLAB会自动为变量分配内存,确定其数据类型等。这无疑为我们编写程序带来了极大方便。

MATLAB的界面也十分友好,它既支持我们用MATLAB语言编写脚本、函数文件完成特定工作,也支持交互式的操作形式,比如种类丰富的工具箱Toolbox,许多工作动动鼠标即可完成。

二、MATLAB图像处理相关函数

本节内容的主要内容是向大家介绍一些常用的、必备的MATLAB图形处理函数。熟练掌握这些函数的用法对于以后的工作有着莫大的好处。下面我们从读取图片开始。

读取图片

myimage = imread('newborn.tif');

myimage是一个矩阵,存储着newborn.tif图片的像素信息;在imread( )函数中,以字符串的形式给出图片的名称。如果MATLAB的工作路径和图片存放的路径不一致,则要写成如下的形式,不然MATLAB会给出找不到图片的错误。

imread ('D:/dataset/image/newborn.tif');
% 注意语句后面的分号不要省略,否则我们的command window会被庞大无比的像素矩阵充满

显示图片

在读入整张图片之后,我们可以用imshow()命令将图片显示出来。

figure(1);
I = imshow(myimage);
title('newborn.tif');

显示图片的交互窗口

为了查看图片上某点的坐标和RBG值(或者灰度值),我们可以使用下面的函数:

impixelinfo; %注意,pixval on早在MATLAB 2008a就已经淘汰了

输入上面命令后,图片的左下角会出现一行信息,随着鼠标的滑动,显示不同点的左边和RGB信息(或灰度值信息)。
左下角impixelinfo命令

使用如下命令可以调整figure窗口的背景颜色:

% 调整背景为绿色
whitebg ('g');
whitebg ('green');
whitebg ([0 1 0]);% 绿色的RGB值
% 其他颜色还有 Cyan blue white magenta yellow red black 等等

这里写图片描述

获取图片信息

size(myimage)% 可以显示矩阵的大小尺寸,几行几列几页

myimage(100,200,2)% 显示第2页第100行第200列的值

impixel(myimage,100,200)% 显示myimage图片在100行200列处的色彩值

imfinfo('name_of_img.jpg');% 可以显示图片的详细信息

impixel的用法

写入图片

有时我们需要将处理结果以图片的形式写入某个位置,这就会用到下面的函数。

% 函数参数格式
imwrite(X,map,'filename','fmt');
% 例子,可以用来转换图片格式,tif->png
a = imread('autumn.tif');
imwrite(a,'autumn.png','png');

命令中的X是要存储图片的像素矩阵,map是该图片的colormap(可选项),两个字符串表示待写图片的名字和格式。

生成伪彩色图片

% 输入一张灰度图名称,不必键入单引号
im=input('Enter the file name (gray level image) :','s');
k=imread(im);
% k是读入的照片,灰度图的z=1
[x y z]=size(k);
% 将uint8格式转换为double格式
k=double(k);
% 对灰度图做变换,生成三个色彩通道
for i=1:x
    for j=1:y
        if k(i,j)>=0 & k(i,j)<50
            m(i,j,1)=k(i,j,1)+5;
            m(i,j,2)=k(i,j)+10;
            m(i,j,3)=k(i,j)+10;
        end
        if k(i,j)>=50 & k(i,j)<100
            m(i,j,1)=k(i,j)+35;
            m(i,j,2)=k(i,j)+28;
            m(i,j,3)=k(i,j)+10;
        end
        if k(i,j)>=100 & k(i,j)<150
            m(i,j,1)=k(i,j)+52;
            m(i,j,2)=k(i,j)+30;
            m(i,j,3)=k(i,j)+15;
        end
        if k(i,j)>=150 & k(i,j)<200
            m(i,j,1)=k(i,j)+50;
            m(i,j,2)=k(i,j)+40;
            m(i,j,3)=k(i,j)+25;
        end
        if k(i,j)>=200 & k(i,j)<=256
            m(i,j,1)=k(i,j)+120;
            m(i,j,2)=k(i,j)+60;
            m(i,j,3)=k(i,j)+45;
        end
    end
end
% 显示原图像
figure,imshow(uint8(k),[]);
% 显示生成的伪彩色图片
figure,imshow(uint8(m),[]);

256色、高彩色、真彩色

每个像素的色彩表示可以用多位二进制数表示。

用1bit只能表示黑或白,即二值图像。

用8bit即可表示256种颜色,所以MATLAB读入的图片矩阵常有uint8的数据格式,8个bit中2个bit表示蓝色、分别用3个bit表示红色和绿色。
256色

高彩色(High Color)可以表示65536种颜色,更加接近真实。
高彩色

而真彩色(True Color)有24bit来表示每个像素的色彩值,最多有16,777,216种颜色,当然储存空间响应也要增大。
真彩色

MATLAB中常用的数据类型

数据类型
注意:数据类型不同的变量之间不能做运算,需要用转换函数先进行一步转换。

这里写图片描述

% 示例代码
% 原始图片
[em,emap] = imread(‘trees.tif');
figure, imshow(em,emap);
% 索引图转换成灰度图
ygray = ind2gray(em, emap);
figure, imshow (ygray);
% 灰度图转换成索引图
[y, map] = gray2ind(ygray);
figure, imshow (y);
% 读入原始图片
im = imread('twins.tif');
figure,imshow(im);
% rgb图像转灰度图
yim = rgb2gray(im);
figure,imshow(yim);
% 灰度图转RGB图
yim2 = gray2rgb(yim);
figure,imshow(yim2);
% 读入原始图像
RGB = imread('peppers.png');
% rgb图像转换为128色的索引图
[X,map] = rgb2ind(RGB,128);
figure, imshow(X,map); 
% rgb图像转换为256色的索引图
[X,map] = rgb2ind(RGB,256);
figure, imshow(X,map);
% rgb图像转换为2色的索引图
[X,map] = rgb2ind(RGB,2);
figure, imshow(X,map);
% 索引图转换为rgb图
[em,emap] = imread('emu.tif')
figure, imshow(em,emap)
y = ind2rgb(em,emap)
figure, imshow(y)

以上我们展示了二值图、灰度图、色彩图、索引图之间的相互转换过程,具体的函数应用可以在command window下键入help rgb2gray等命令来获取详细信息。

三、小练习

1)试着在MATLAB的命令窗口键入help imdemos,之后命令窗口会给出Image Processing Toolbox中所有的示例(sample)。列一个表格,看看有多少个样本图片。
对每一张图片,试着确定它的类型(二值图、灰度图、真彩色、索引色)
确定图片的尺寸,在像素层面。

下面是答案:

Sample TIFF images: 
autumn.tif, 
board.tif, 
cameraman.tif, 
canoe.tif, 
cell.tif, 
circbw.tif, 
circuit.tif, 
eight.tif, 
forest.tif, 
kids.tif, 
logo.tif, 
m83.tif, 
moon.tif, 
mri.tif, 
paper1.tif, 
pout.tif, 
shadow.tif, 
spine.tif, 
tire.tif, 
trees.tif.
Binary: 
circbw.tif (3822), 
logo.tif (1074).

Grayscale: 
cameraman.tif (65536), 
cell.tif (30369), 
circuit.tif (76160), 
eight.tif (74536), 
moon.tif (192246), 
paper1.tif (51296), 
pout.tif (69840),
tire.tif (47560).

True color: 
autumn.tif (213210), 
board.tif (594864), 
forest.tif (134547).

Indexed color: 
canoe.tif (71622), 
forest.tif (134547), 
kids.tif (127200), 
m83.tif (151200), 
mri.tif (16384), 
shadow.tif (66454), 
spine.tif (179830), 
trees.tif (90300).

2)找一张灰度图,然后利用imwrite()函数将其写为JPEG、PNG、BMP格式的图片,并且比较他们各自的大小。

没有更多推荐了,返回首页