2017-07-12 12:46:27 jjuteacher 阅读数 263

下面这张图片估计很多人都非常熟悉,是的,图像处理领域的标准图Lena,记得之前看到过这张图的原图,突然有兴致,看看这张图片背后的故事。

lena

 

原图如下:

p32605371-2

最开始看到这张原图也是有点吃惊,原来司空见惯的Lenna头像图竟然是这张图的一小部分,那么这样经典的图片是怎么来的呢?

Lenna/Lena是谁?


从comp.compression FAQ中, 我们知道Lenna/Lena是一张数字化了的1972年12月份的《花花公子》折页。Lenna这个单词是在《花花公子》里的拼法,Lena是她名字的瑞典语拼法。(在英语中,为了正确发音,Lena有时被拼做Lenna。)最后的关于Lena Soderberg (ne Sjooblom)的报道说她现在居住在她的本国瑞典,有着幸福的婚姻并是三个孩子的妈妈,在liquor monopoly州有一份工作。1988年,她被某个瑞典计算机相关杂志采访,因为她的照片而发生的一切令她很高兴。这是她第一次得知她的照片在计算机领域被使用。

为何要使用Lenna图像?

David C. Munson. 在“A Note on Lena” 中给出了两条理由:首先,Lenna图像包含了各种细节、平滑区域、阴影和纹理,这些对测试各种图像处理算法很有用。它是一副很好的测试图像!第二,Lena图像里是一个很迷人的女子。所以不必奇怪图像处理领域里的人(大部分为男性)被一副迷人的图像吸引。

谁制作了Lenna图像?

在1999年10月29日,我收到一封来自Chuck McNanis的email,里面告诉我们这个曾经扫描了Lenna图像的“不知名的科研人员”是William K. Pratt博士。下面是email:

我在图像处理研究所的图像处理实验室作为一个系统程序员工作了5年('78-'83),这个实验室发布了Lenna图像和其他一些被人们经常引用做“The baboon image”的图像(包括Manril)。这个“不知名的科研人员”是William K. Pratt博士,现在在Sun Microsystems。他当时正在写一本关于图像处理的书,他需要几张标准图像。For a long time the folded up centerfold that had been the basis for that image was in the file cabinet at the lab. I went back in 1997 to visit and the lab has undergone many changes and the original image files were nowhere to be found. The original distribution format was 1600BPI 9-track tape with each color plane stored separately.

--Chuck McManis (USC Class of '83)

你想看原始的Lenna图像么?

标准的数字Lena图像只是原始图像的脸和露肩特写。最近Chuck Rosenberg获得了原始的《花花公子》杂志的图像,并把它放在网上。下面是相关的一组图片。

200804261209199804109200804261209199824046

据说1997年第五十届IS&T,邀請她参加,她的反应是“那么多年了,大家一定看的很腻吧”有人甚至把 Lena 称为 “The First Lady of Internet”。200804261209199915015200804261209199942015

★emouse 思·睿博客文章★ 原创文章转载请注明:http://emouse.cnblogs.com
2017-03-17 14:32:18 zhangyibo123456789 阅读数 838

图像处理之对BMP图片的认识



  学了图像处理有一段时间了,有没有发现用的图片都是BMP格式的呢?

       那么我们又为什么总用BMP格式的图片呢?

       今天我也是怀着一颗好奇心把有关图片格式知识整理了一下。

       希望网友们能对图片有新的认识。


首先是图片格式大全:

BMP格式:Windows系统下的标准位图格式,未经过压缩,一般图像文件会比较大。在很多软件中被广泛应用. 
JPEG格式:也是应用最广泛的图片格式之一,它采用一种特殊的有损压缩算法,将不易被人眼察觉的图像颜色删除,从而达到较大的压缩比(可达到2:1甚至40:1),因为JPEG格式的文件尺寸较小,下载速度快,所以是互联网上最广泛使用的格式!
GIF格式:最大的特点是不仅可以是一张静止的图片,也可以是动画,并且支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。但是其色域不太广,只支持256种颜色.
PSD格式:Photoshop的专用图像格式,可以保存图片的完整信息,土层,通道,文字都可以被保存,图像文件一般较大。
PNG格式:与JPG格式类似,网页中有很多图片都是这种格式,压缩比高于GIF,支持图像透明,可以利用Alpha通道调节图像的透明度,是网页三剑客之一Fireworks的源文件。
TIFF格式:它的特点是图像格式复杂、存贮信息多,在Mac中广泛使用的图像格式,正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。很多地方将TIFF格式用于印刷.
TGA格式:TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有着很大影响,在做影视编辑时经常使用,例如3DS MAX输出TGA图片序列导入到AE里面进行后期编辑。
EPS格式:苹果Mac机的用户则用得较多。它是用PostScript语言描述的一种ASCII码文件格式,主要用于排版、打印等输出工作。
          想必各位对此心中已经有了大概了吧。下面当然是对BMP详细解析了。静下心来,慢慢看吧。

BMP文件格式

BMP(Bitmap-File)图形文件,又叫位图文件,是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。一个BMP文件由四部分组成:

一个BMP文件,可以用代码表示,如下:

typedef struct tagBITMAP_FILE{
 
      BITMAPFILEHEADER bitmapheader;
      BITMAPINFOHEADER bitmapinfoheader;
      PALETTEENTRY palette[256];
      UCHAR *buffer;   //UCHAR 大小1字节(同BYTE), 在VC6下
 
} BITMAP_FILE;
1、 BMP文件头:BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER { // bmfh 
    WORD    bfType; 
    DWORD   bfSize; 
    WORD    bfReserved1; 
    WORD    bfReserved2; 
    DWORD   bfOffBits; 
} BITMAPFILEHEADER;

bfType 说明文件的类型,该值必需是0x4D42,也就是字符'BM',否则表示根本不是BMP
bfSize 说明该位图文件的大小,用字节为单位
bfReserved1 保留,必须设置为0
bfReserved2 保留,必须设置为0
bfOffBits 说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。

 

2、位图信息段:BITMAPINFOHEADER

typedef struct tagBITMAPINFOHEADER{ // bmih 
    DWORD  biSize; 
    LONG   biWidth; 
    LONG   biHeight; 
    WORD   biPlanes; 
    WORD   biBitCount 
    DWORD  biCompression; 
    DWORD  biSizeImage; 
    LONG   biXPelsPerMeter; 
    LONG   biYPelsPerMeter; 
    DWORD  biClrUsed; 
    DWORD  biClrImportant; 
} BITMAPINFOHEADER; 

biSize 说明BITMAPINFOHEADER结构所需要的字节数
biWidth 说明图象的宽度,以象素为单位
biHeight 说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,即:数据的第一行其实是图像的最后一行,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。
biPlanes 表示bmp图片的平面属,显然显示器只有一个平面,所以恒等于1
biBitCount 说明比特数/象素,其值为1、4、8、16、24、或32。
biCompression 说明图象数据压缩的类型,其中: 

BI_RGB:没有压缩

BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);

BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成

BI_BITFIELDS:每个象素的比特由指定的掩码决定。

BI_JPEG:JPEG格式

biSizeImage 说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0。
biXPelsPerMeter 说明水平分辨率,用象素/米表示。
biYPelsPerMeter 说明垂直分辨率,用象素/米表示。
biClrUsed 说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)。
biClrImportant 说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。

3、调色板

上面这张BMP图片是否有调色板呢?答案是否定的。

因为从bfOffBits = 54字节可以看出,刚好是sizeof(BITMAPFILEHEADER )+sizeof(BITMAPINFOHEADER);

那么究竟调色板是什么东西?有什么用?为什么我们这种图片不带调试板呢?

我们先来说说三元色RGB概念。

我们知道,自然界中的所有颜色都可以由红、绿、蓝(R,G,B)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如浅红。针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分;255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级概念称为量化。

表1.1 常见颜色的RGB组合值


当一幅图中每个象素赋予不同的RGB值时,能呈现出五彩缤纷的颜色了,这样就形成了彩色图。

让我们举例说明什么是调色板?为什么需要调色板?

        有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。

因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的R、G、B值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为红色时,只需要标明0即可。

让我们再来计算一下:16种状态可以用4位(bit)表示,所以一个象素要用半个字节。整个图象要用200×200×0.5,约20k字节,再加上表占用的字节为3×16=48字节.整个占用的字节数约为前面的1/6,省很多吧?

        这张R、G、B的表,就是我们常说的调色板(Palette),另一种叫法是颜色查找表LUT(Look Up Table),似乎更确切一些。调色板在windows里的结构定义如下:

typedef struct tagPALETTEENTRY { // pe 
    BYTE peRed; 
    BYTE peGreen; 
    BYTE peBlue; 
    BYTE peFlags; 
} PALETTEENTRY; 

那么为什么我们这张BMP不带调色板呢?

       是因为我们这张BMP是24位真彩色的BMP,所谓真彩色图(true color),就是它的颜色数高达256×256×256种,也就是说包含我们上述提到的R、G、B颜色表示方法中所有的颜色。真彩色图并不是说一幅图包含了所有的颜色,而是说它具有显示所有颜色的能力,即最多可以包含所有的颜色。表示真彩色图时,每个象素直接用R、G、B三个分量字节表示,而不采用调色板技术。原因很明显:如果用调色板,表示一个象素也要用24位,这是因为每种颜色的索引要用24位(因为总共有256×256×256种颜色,即调色板有256×256×256行),和直接用R,G,B三个分量表示用的字节数一样,不但没有任何便宜,还要加上一个256×256×256×3个字节的大调色板。所以真彩色图直接用R、G、B三个分量表示,它又叫做24位色图。

这么看来BMP文件不能一概而论了,其是否用调色板或者是RGB掩码,位图数据中的数据的真正含义直接与biBitCount 有关,不同类型的位图,其中的设计原理也不同,下面对此作一个对比:


4、位图数据

上面基本把调色板及相关取色策略梳理清楚了,看下面的例子24位BMP图,每3个字节表示一个像素,3个字节分别表示R、G、B的分量值


这里每3个字节表示一个像素的颜色,注意:由于位图信息头中的图像高度是正数,所以位图数据在文件中的排列顺序是从左下角到右上角,以行为主序排列的。

这是我见过最详细的资料了,整理了一下分享给大家。

参考资料:

http://www.cnblogs.com/xiekeli/archive/2012/05/09/2491191.html

2016-04-24 19:13:29 GarfieldEr007 阅读数 4418

airplane



baboon







book





cat





fruits




hand_sample1





hand_sample2





hand_sample3





lena





one_way_train_0000




one_way_train_0001




scene











stuff




Template_Matching_Original_Image




Template_Matching_Template_Image








2018-12-05 21:32:29 yql_617540298 阅读数 81

一、读取图片方式

         PIL、opencv、scikit-image:

(1)PIL和Pillow只提供最基础的数字图像处理,功能有限;

(2)opencv实际上是一个c++库,只是提供了python接口,更新速度非常慢;

(3)scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理;

二、PIL

读出来的数据是PIL的类型,通道顺序是RGB。

from PIL import Image
img2 = Image.open('C:/Users/Administrator/Desktop/test/rgb_0001.png')
print("PIL:",img2.size)
print(img2.getpixel((0, 0)))

三、opencv

读出来的数据是numpy格式的,通道顺序是BGR。

import cv2
img3 = cv2.imread('C:/Users/Administrator/Desktop/test/rgb_0001.png')
print("cv2:",img3.shape)
print(img3[0][0])

 

四、scikit-image

读出来的数据是numpy格式的,通道顺序是RGB。

import skimage.io
img1 = skimage.io.imread('C:/Users/Administrator/Desktop/test/rgb_0001.png')
print("skimage:",img1.shape)
print(img1[0][0])

 

 

2019-09-04 16:53:16 qq_34616741 阅读数 466

虽说是CSDN,但因为处理的过程中要用到病理图片,所以这里简单的介绍一下病理图像的标准化。
首先介绍一下我们的病理图像。
病理图像就是我们高中时候用的玻片在扫描仪下拍摄的高分辨率图像。具体制作过程可以参见百度。https://wenku.baidu.com/view/60b5d0fe2af90242a995e58a.html
病理图像可以帮助医生对病人做出诊断。通过病理图像,我们可以看到肿瘤细胞的具体情况。比如说有无浸润,有无淋巴结转移,分化程度如何。对肿瘤的诊断,预后,分级分期都是很有帮助的。
人工智能在病理图像的领域也有十分广泛的应用。可以用来做分割,分类,预后等。
随着人们研究的深入,病理图像的标准化变成了一个预处理的必要过程。那我们为什么要进行图像的标准化呢。
首先,病理图片的成像和很多因素有关系,制作过程,扫描的机器等都会对图像造成颜色的结构上面的不同。这种不同对人眼来说影响比较小,虽然颜色略有不同,但是还是可以分辨的。但是对于深度学习等算法来说就不太能适应这种不同。还有一个很大的原因是,也就是这种颜色和结构上的不同,使得不同机型, 不同机构甚至是不同操作员扫描出来的病理图片不能够放在一起用。
处理这种颜色差异的方法,就是颜色的标准化。叫做color normalization或者是stain normalization。原理就是将所有的图片都标准化到同一张模板图片的颜色分布上。
对于病理图片的标准化,从开始到现在大概有3种比较主流的方法。一个是灰度直方图的标准化,一个是颜色的标准化,一个是光谱的标准化。按照字面意思其实就是将所有图片都转化成模板图片灰度分布,将所有图片都转化成模板图片颜色(RGB)分布,将所有图片都转化成模板图片光谱(即染料的颜色空间,有多少种染料就有多少种颜色空间)分布。
前面两种的缺点是,灰度分布的方式要求两个图片的灰度分布都差不多,但往往图片的灰度分布差异还是挺大的,而且转化的过程中可能丢失很多结构和颜色的信息。颜色转换的方式可能会丢失结构信息,而且有监督的颜色转化算法计算量非常大。
最新的算法是一种保存结构和颜色标准化算法,属于光谱匹配的方式。他保存了图片的结构,而是标准化了颜色,并且计算量上面还是可以接受的。下面给出论文名字,论文中有matlab源码的下载链接:
Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images
但是需要说明的是,这种标准化方法只适合HE染色的病理图像,对于IHC染色的不适用。具体原因是因为染料的显色方式不同,这里不展开说明了。

数字图像处理(1)

阅读数 2539

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