Anywhere

水中苇
随笔 - 28, 文章 - 3, 评论 - 0, 引用 - 0
数据加载中……

Factory && AbstractFactory;

Factory模式----为一类对象提供创建接口.

特点:当Factory仅仅提供了创建对象的接口时,这时候可以用模板的形式定义Factory类.
       此时的工厂直接生产.
例子:
代码:
Factory类提供一个创建对象的接口:virtual class CreateClass()=0;          //class 代表一个抽象类
ClassFactory则实现这个接口,virtual class CreateClass(){return new class()};  //class代表一个对象类.

使用模板的话:
class Factory
{
public:
~Factory();
virtual class Createclass()=0;
protected:
Factory();
};
typedef class<type>
class classFactory:public Factory;
{
public:
    classFactory();
  ~classFactory();
    type Createclass(){return new type;}
};
 

      
当Factory不仅提供了创建对象的接口,同时将对象的实例化放到了工厂的子类中.
把Factory看作是总厂,负责提供"技术".方法;Factory的子类看作是分工厂,负责生产具体的物品.
这样,生产一种商品就要派生一个子类.为了减少Factory的子类,也可以采用模板的形式定义子类.
 
AbstractFactory模式----为一组对象提供创建接口.
                   AbstractFactory
ChildFactoryA ChildFactoryB ..
物品1生产 物品2生产(或者更多相关的) 物品3生产 物品4(more)
总之,抽象工厂是用来封装创建一组或一类相关对象的接口.

posted @ 2009-07-10 16:16 三水寿 阅读(164) | 评论 (0)编辑 收藏

[转]图像处理中的颜色空间

HSV颜色空间
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时 加入不同比例的白色,黑色即可获得各种不同的色调。

HSI颜色空间
HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。HSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。 通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感 程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间, 它比RGB色彩空间更符合人的视觉特性。在图像处理和计算机视觉中大量算法都可在HSI色彩空间中 方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着 转换关系。

其他颜色模型:

 

RGB颜色空间
RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。

CMYK颜色空间
CMYK(cyan,magenta,yellow)颜色空间应用于印刷工业,印刷业通过青(C)、品(M)、黄(Y)三原色油墨的不同 网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的CMY颜色空间。实际印刷中,一般采用青 (C)、品(M)、黄(Y)、黑(BK)四色印刷,在印刷的中间调至暗调增加黑版。当红绿蓝三原色被混合时,会产生 白色,但是当混合蓝绿色、紫红色和黄色三原色时会产生黑色。既然实际用的墨水并不会产生纯正的颜色, 黑色是包括在分开的颜色,而这模型称之为CMYK。CMYK颜色空间是和设备或者是印刷过程相关的,则工艺方法、 油墨的特性、纸张的特性等,不同的条件有不同的印刷结果。所以CMYK颜色空间称为与设备有关的表色空间。 而且,CMYK具有多值性,也就是说对同一种具有相同绝对色度的颜色,在相同的印刷过程前提下,可以用分种 CMYK数字组合来表示和印刷出来。这种特性给颜色管理带来了很多麻烦,同样也给控制带来了很多的灵活性。 在印刷过程中,必然要经过一个分色的过程,所谓分色就是将计算机中使 用的RGB颜色转换成印刷使用的CMYK 颜色。在转换过程中存在着两个复杂的问题,其一是这两个颜色空间在表现颜色的范围上不完全一样,RGB的 色域较大而CMYK则较小,因此就要进行色域压缩;其二是这两个颜色都是和具体的设备相关的,颜色本身没有 绝对性。因此就需要通过一个与设备无关的颜色空间来进行转换,即可以通过以上介绍的XYZ或LAB色空间来 进行转换。

HSL颜色空间
HSL(hue,saturation,lightness)颜色空间,这个颜色空间都是用户台式机图形程序的颜色表示, 用六角形锥体表示自己的颜色模型。

HSB颜色空间
HSB(hue,saturation,brightness)颜色空间,这个颜色空间都是用户台式机图形程序的颜色表示, 用六角形锥体表示自己的颜色模型。

Ycc颜色空间
柯达发明的颜色空间,由于PhotoCd在存储图像的时候要经过一种模式压缩,所以 PhotoCd采用了 Ycc颜色空间,Ycc空间将亮度作由它的主要组件,具有两个 单独的颜色通道,采用Ycc颜色空间 来保存图像,可以节约存储空间。

XYZ颜色空间
国际照明委员会(CIE)在进行了大量正常人视觉测量和统计,1931年建立了"标准色度观察者", 从而奠定了现代CIE标准色度学的定量基础。由于"标准色度观察者"用来标定光谱色时出现负 刺激值,计算不便,也不易理解,因此1931年CIE在RGB系统基础上,改用三个假想的原色X、Y、 Z建立了一个新的色度系统。将它匹配等能光谱的三刺激值,定名为"CIE1931 标准色度观察者 光谱三刺激值",简称为"CIE1931标准色度观察者"。这一系统叫做"CIE1931标准色度系统"或称为" 2° 视场XYZ色度系统"。CIEXYZ颜色空间稍加变换就可得到Yxy色彩空间,其中Y取三刺激值中Y的值, 表示亮度,x、y反映颜色的色度特性。定义如下:在色彩管理中,选择与设备无关的颜色空间是 十分重要的,与设备无关的颜色空间由国际照明委员会(CIE)制定,包括CIEXYZ和CIELAB两个标准。 它们包含了人眼所能辨别的全部颜色。而且,CIEYxy测色制的建立给定量的确定颜色创造了条件。 但是,在这一空间中,两种不同颜色之间的距离值并不能正确地反映人们色彩感觉差别的大小, 也就是说在CIEYxy色厦图中,在 不同的位置不同方向上颜色的宽容量是不同的,这就是Yxy颜色空间 的不均匀性。这一缺陷的存在,使得在Yxy及XYZ空间不能直观地评价颜色。

Lab 颜色空间
Lab颜色空间是由CIE(国际照明委员会)制定的一种色彩模式。自然界中任何一点色都可以在Lab空间 中表达出来,它的色彩空间比RGB空间还要大。另外,这种模式是以数字化方式来描述人的视觉感应, 与设备无关,所以它弥补了RGB和CMYK模式必须依赖于设备色彩特性的不足。 由于Lab的色彩空间要 比RGB模式和CMYK模式的色彩空间大。这就意味着RGB以及CMYK所能描述的色彩信息在Lab空间中都能 得以影射。Lab颜色空间取坐标Lab,其中L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色, 负端代表兰色(a,b)有L=116f(y)-16, a=500[f(x/0.982)-f(y)], b=200[f(y)-f(z/1.183 )];其中: f(x)=7.787x+0.138, x<0.008856; f(x)=(x)1/3,x>0.008856

YUV颜色空间
在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD(点耦合器件)摄像机,它把摄得的彩色图像 信号,经分色、分别放大校正得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y、B-Y, 最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这就是我们常用的YUV色彩空间。 采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量, 那么这样表示的图就是黑白灰度图。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机 的兼容问题,使黑白电视机也能接收彩色信号。根据美国国家电视制式委员会,NTSC制式的标准,当白光的 亮度用Y来表示时,它和红、绿、蓝三色光的关系可用如下式的方程描述:Y=0.3R+0.59G+0.11B 这就是常用 的亮度公式。色差U、V是由B-Y、R-Y按不同比例压缩而成的。如果要由YUV空间转化成RGB空间,只要进行 相反的逆运算即可。与YUV色彩空间类似的还有Lab色彩空间,它也是用亮度和色差来描述色彩分量,其中L为 亮度、a和b分别为各色差分量

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/noter/archive/2007/11/14/1883844.aspx

posted @ 2009-07-02 11:25 三水寿 阅读(825) | 评论 (0)编辑 收藏

[MATLAB]领域插值和线性插值

先由目标图像的坐标得到原图像的坐标,然后将原图像坐标点的像素值赋给新的图像.

1.领域插值

I1=imread('flower.jpg');%读入彩色图像

I=rgb2gray(I1);%转换成灰度图像,若原图为灰度图,可省去此行

[nrows,ncols]=size(I);

K = str2double(inputdlg('请输入缩放倍数(缩小请用小于1的倍数表示)', 'INPUT scale factor', 1, {'0.5'}));

width = K * nrows;         % K为缩放的倍数,确定输出矩阵大小                       

height = K * ncols;

J = uint8(zeros(width,height)); %定义输出图像矩阵

widthScale = nrows/width;

heightScale = ncols/height;

for x = 5:width - 5          %为防止矩阵溢出而选择的参数5             

   for y = 5:height - 5

       xx = x * widthScale; %xxyy为原坐标,xy为新坐标       
      
yy = y * heightScale;

       if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)      

           J(x,y) = I(int16(xx),int16(yy));%yy为整数,则直接赋值过去

       else                                   

           a = double(round(xx));             

           b = double(round(yy)); %若不是整数四舍五入后把临近值赋过去

           J(x,y) = I(a,b);                  

       end

    end

end

imshow(I); %输出原图像

figure;

imshow(J); %输出缩放后图像

二、双线性插值法

bilinear插值法具体程序:

I=imread('flower.jpg'); %读入原图像

[nrows,ncols]=size(I); %读取图像矩阵大小,方便后面操作

K = str2double(inputdlg('please input scale factor (must between 0.2 - 5.0)', 'INPUT scale factor', 1, {'0.5'}));

width = K * nrows;                 

height = K * ncols;

J = uint8(zeros(width,height));

widthScale = nrows/width;

heightScale = ncols/height;

for x = 5:width - 5           % 5为了防止矩阵超出边界溢出

   for y = 5:height - 5

       xx = x * widthScale;     % xx, yy为原坐标,x,y为新坐标

       yy = y * heightScale;

       if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)      

           J(x,y) = I(int16(xx),int16(yy));%xxyy为整数,直接赋值

       else                        

           a = double(uint16(xx));       

           b = double(uint16(yy));

           x11 = double(I(a,b));                % x11 <- I(a,b)

           x12 = double(I(a,b+1));              % x12 <- I(a,b+1)

           x21 = double(I(a+1,b));              % x21 <- I(a+1,b)

           x22 = double(I(a+1,b+1));            % x22 <- I(a+1,b+1)         

           J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx) * x12) );    % 用双线性插值计算公式计算

       end

    end

end

imshow(I);

figure;

imshow(J);

posted @ 2009-07-02 10:09 三水寿 阅读(1270) | 评论 (0)编辑 收藏

纪念毕业一周年~~

去年的今天,下着雨,党校宾馆是我们俩共同的起点,终点却他两端.延吉,滕州.就这样,一对恋人就开始了异地而居的生活.
今天依然下着雨,虽然不在党校宾馆,虽然我俩没有共同的起点,虽然我俩还在异地,但生活还在继续,我俩的感情也在继续,庆之,幸之,感动之!

posted @ 2009-07-01 21:18 三水寿| 编辑 收藏

开博

这次得开下去.

posted @ 2009-06-26 08:16 三水寿 阅读(116) | 评论 (0)编辑 收藏

开博

这次得开下去.

posted @ 2009-06-26 08:16 三水寿 阅读(123) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3