`
john2007
  • 浏览: 77851 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

图像的单色变换——原理与实现(Single color transformation)

阅读更多

Single color transformation——Principle and implement

 

From May 1 to May 3, I have a 3-day holiday. When I was on the Internet, I downloaded some resource about image process by chance. Before I have seen someone develop a java-based image process program (JPS short for java Photoshop). Then I think I can also develop one based CSharp. Good idea! Let’s do it.

 

But image process is a profound discipline. It requires adept programming skills and good mathematical knowledge. The best programming language for it is C or C plusplus, because they calculate very fast. However java and .Net are run time translated language. They are not fast enough for image process. So I just look it as playing and a method of wasting the vacuity time.

 

Chapter 1 Single color transformation

 

Today I will talk about single color transformation. That is to say how we can transform a color photo to a black and white one.

As we all know, in computer science color of a color monitor comprises R, G and B 3 color. RGB have a value form 0 to 255. So we change each pixel of a color photo to a black, white or gray one, then it will look like a black and white photo.

There are 5 methods can make it. I call R-transformation, G-transformation, B-transformation, Mean-transformation and Inverse-phase. Now I will interpret the principle of each.

 

R-transformation

 

getpixel() method of Picturebox or Bitmap can return a value of Color. Class Color has r, g and b 3 attributes. They are the RGB values of a pixel. Then we can change and save them with setPixel() method easily. Source codes are:

Bitmap bmpold = new Bitmap(picOld.Image);

            Color c = new Color();

 

            for (int i = 0; i < bmpold.Width; i++)

                for (int j = 0; j < bmpold.Height; j++)

                {

                    c = bmpold.GetPixel(i, j);

                    Color cc = Color.FromArgb(c.R, c.R, c.R);

                    bmpold.SetPixel(i, j, cc);

                }

            picNew.Image = bmpold;

 

We can use a picture to test it. The original picture is a photo of a beautiful girl, with short hair, big eyes and a big sweet smile. The transformation results can be find in my albums.

 

G and B-transformation

 

Please pay attention to the line with green color. We can change it to c.G and c.B. then we can get G and B-transformation.

 

Y-transformation

 

for (int i = 0; i < bmpold.Width; i++)

                for (int j = 0; j < bmpold.Height; j++)

                {

                    c = bmpold.GetPixel(i, j);

                    int r, g, b, y;

                    r = c.R;

                    g = c.G;

                    b = c.B;

                    y = (int)(0.31*r +0.59* g + 0.11*b);

                    if (y < 0) y = 0;

                    if (y > 255) y = 255;

                    Color cc = Color.FromArgb(y, y, y);

                    bmpold.SetPixel(i, j, cc);

                }

Mean-transformation

It is also easy to understand. We can get the mean value of a pixel’ RGB. And set the pixel with the mean value. Look source code below:

c = bmpold.GetPixel(i, j);

                    int r, g, b, y;

                    r = c.R;

                    g = c.G;

                    b = c.B;

                    y = (int)(0.31*r +0.59* g + 0.11*b);

                    if (y < 0) y = 0;

                    if (y > 255) y = 255;

                    Color cc = Color.FromArgb(y, y, y);

So easy! Isn’t it??

 

Inverse-transformation

 

c = bmpold.GetPixel(i, j);

                    int r, g, b, y;

                    r = 255-c.R;

                    g = 255 - c.G;

                    b = 255 - c.B;

                    Color cc = Color.FromArgb(r, g, b);

                    bmpold.SetPixel(i, j, cc);

Just pay attention to the green lines. If you have any knowledge of programming language, you can understand it.

 

The End

 

There are many funny pictures’ transformations. I will interpret the principle and implement it in C#.Net.

I just do it for fun. And writing in English can practice my written English.

 

101905_chengyuhanx400.jpgInverse变换.JPG

分享到:
评论

相关推荐

    图像处理-尺度变换scaling transformation

    总结一下,本项目聚焦于图像处理中的尺度变换,提供了Matlab实现的最近邻插值和双线性插值的实例。通过学习和实践这些代码,不仅可以掌握图像大小调整的基本方法,还能加深对插值理论的理解,这对于进行图像分析、...

    数字图像处理实验报告(图像灰度变换处理).pdf

    在 Matlab 中,常用的图像处理函数包括读取图像、显示图像、保存图像、亮度变换、绘制直方图、直方图均衡化、像平滑与锐化、图像复原等。这些函数可以实现对图像的各种处理和处理。 二、实验步骤 1. 获取实验用...

    图像灰度变换程序设计

    通过本项目的学习与实践,深刻理解了灰度变换的基本原理和实现方法。特别是通过MATLAB编程实践,掌握了灰度变换的关键技术和具体应用,提高了自己在图像处理领域的技能水平。 #### 第6章:参考文献 - Gonzalez, R....

    图像几何变换

    在学习和实现这些变换时,重要的是理解每种变换背后的数学原理,以及如何在C#中有效地表示和应用这些变换。此外,还需要注意性能优化,尤其是在处理大量或大尺寸图像时。理解图像数据结构和内存管理也是关键,以避免...

    image-transformation.rar_TRANSFORMATION_绘图 变换

    这个项目可能包含源代码、头文件和其他资源,用于演示和理解图像变换的基本原理和实现方法。 描述提到“利用VC++实现图像变换(包括平移、伸缩、旋转)”,这表明我们将关注的是Microsoft Visual C++这一开发环境下...

    三维坐标变换_坐标变换_transformation3d_源码

    6. **源码实现**:“transformation3d”可能指的是一个包含这些变换功能的代码库或类。源码通常会提供API,允许开发者方便地进行平移、旋转和缩放操作。例如,可能会有一个`applyTransformation(matrix)`函数,接受...

    S-Transformation1234_S域_matlab源码_时频域分析工具——s变换_

    本文将深入探讨S变换的概念、原理以及如何在MATLAB中实现。 S变换的定义基于复对数函数,它可以将信号表示为时间与频率的二维函数,形式为: \[ S(t, \omega) = \int_{-\infty}^{\infty} x(\tau) e^{-\frac{1}{2}...

    Park Transformation 派克变换

    派克变换(Park Transformation)是一种在电机控制和电力系统分析中常用的数学变换,它能够将静止的三相坐标系(abc坐标系)转换为同步旋转坐标系(dq0坐标系)。这种方法特别适用于交流(AC)电机的控制,如感应...

    Chapter4 图像几何变换.pdf

    在本章节中,我们将详细探讨图像的仿射变换(Affine Transformation),以及如何利用仿射变换实现图像的几何变形,进而实现图像的平移、缩放、旋转等操作。 仿射变换是二维空间到二维空间的线性变换,包括线性变换...

    Image-Transformation.rar_TRANSFORMATION_图像变化

    本项目"Image-Transformation.rar"是基于VC++(Visual C++)开发的一个小程序,旨在实现一系列基本的图像变换功能。让我们深入探讨一下这些功能以及它们在实际应用中的意义。 首先,图像二值化是一种将图像转化为...

    image-transformation.zip_TRANSFORMATION_vc图像频谱

    "image-transformation.zip_TRANSFORMATION_vc图像频谱"这个主题集中讨论了如何使用VC++编程语言来实现图像的傅立叶变换和滤波处理。 傅立叶变换是图像频谱分析的核心工具,它将图像的像素值表示为不同频率的正弦和...

    Gray-linear-transformation.rar_TRANSFORMATION_灰度变换matlab_线性灰度变换

    标题中的“Gray-linear-transformation.rar”表明这是一个关于灰度图像线性变换的压缩包,而“TRANSFORMATION_灰度变换matlab_线性灰度变换”进一步确认了这个主题,说明我们将探讨如何在MATLAB环境下执行灰度图像的...

    图像对数极坐标变换的FPGA实现.pdf

    在变换过程中,图像中心点周围的一系列像素环被映射到对数极坐标系中的每一行,通过调整参数K和L,保证变换图像不会因尺寸变化而失真。这样的变换显著降低了DSP在匹配运算中的计算量,提升了整个景象匹配系统的实时...

    基于matlab实现了音乐信号处理中的恒Q变换(Constant Q Transformation).rar

    恒Q变换(Constant Q Transformation, CQT)是一种在音乐信号处理中广泛应用的频谱分析方法。与传统的傅里叶变换相比,CQT更注重音乐和音频信号的特性,尤其是在频率分辨率和时间分辨率上的平衡。在MATLAB环境中实现...

    OpenCV图像几何变换之透视变换

     透视变换(Perspective Transformation)的本质是将图像投影到一个新的视平面,其通用变换公式为: (u,v)为原始图像像素坐标,(x=x’/w’,y=y’/w’)为变换之后的图像像素坐标。透视变换矩阵图解如下: ...

    图像处理课件:transform 图像变换.ppt

    图像处理课件:transform 图像变换.ppt 图像处理是计算机科学和信息技术的重要组成部分,图像变换是图像处理的基本技术之一。图像变换是指对图像进行旋转、缩放、平移、镜像等操作,以改变图像的形状、大小、方向等...

    图像处理透视变换(Python+Opencv)

    透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。 如果你想对图像进行校准,那么透视变换是非常有效的变换手段。透视变换的定义为将图像...

    图像处理经典常用算法及论文复现.zip

    ## 1.Interpolation Algorithm 实现了一些常用插值算法## 2.Affine Transformation 实现了仿射变换(旋转、平移、缩放、偏移、组合变换)## 3.Grayscale transformation 实现了一些图像增强算法## 4.Image Filtering...

    基于MATLAB的特定前景图像分离,将车辆识别并分离出来的第二种方法——通过图像的RGB线性变换的像素操作分离背景

    对图像f中任意像素的灰度值x进行变换,得到图像f 中对应像素的灰度值XF。 具体的算法步骤如下: i. Set adjustment linearity value; ii. Read in the image to be processed and assign it to I; iii. Assign ...

    基于OPenCV实现图像处理各种常用算法(C++)

    2.Affine Transformation 实现了仿射变换(旋转、平移、缩放、偏移、组合变换) 3.Grayscale transformation 实现了一些图像增强算法 4.Image Filtering 实现了一些常用图像滤波算法 5.Image segmentation 实现了...

Global site tag (gtag.js) - Google Analytics