2018-10-29 18:45:30 lgyuWT 阅读数 1127
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    3961 人正在学习 去看看 贾志刚

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

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

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

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

2014-03-31 11:34:33 Linoi 阅读数 5132
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    3961 人正在学习 去看看 贾志刚

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

2017-09-24 16:11:39 u013488089 阅读数 956
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    3961 人正在学习 去看看 贾志刚
2017-10-03 00:33:06 hhy_csdn 阅读数 8256
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    3961 人正在学习 去看看 贾志刚

图像处理的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格式的图片,并且比较他们各自的大小。

2019-04-30 10:42:49 qq_33369187 阅读数 817
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    3961 人正在学习 去看看 贾志刚

图像处理与识别真彩色增强

一、真彩色增强原理

在图像的自动分析中,彩色是一种能简化目标提取和分类的重要参量。在彩色图像处理中,选择合适的彩色模型是很重要的。电视摄像机和彩色扫描仪都是根据RGB模型工作的。为在屏幕上显示彩色图一定要借用RGB模型,但HSI模型在许多处理中有其独特的优点。
HSI模型反应了人的视觉系统观察彩色的方式,使用非常接近于人对彩色感知的方式来定义彩色。对于图像处理来说,这种模型的优势在于将颜色信息和灰度信息分开了。色调(Hue)分量是描述一种纯色的颜色属性(如红色,绿色,黄色),饱和度(Saturation)分量是一种纯色被白光稀释的程度的度量,也可以理解为颜色的浓淡程度(如深红色,淡绿色),亮度(Instensity)分量描述颜色的亮暗程度。这个模型的建立基于以下两个重要事实:
(1) I分量与图像的色彩信息无关
(2) H和S分量与人感受颜色的方式紧密相连
先讨论一组R、G、B分量图和一组H、S、I分量图在表示中的异同。一副真彩色RGB图可用24位表示,R、G、B各8位,即每个像素在R、G、B分量图中各取256个值。将R、G、B都归一化到[0,1]范围,相邻值间的差是1/255。一副真彩色RGB图也可用H、S、I各8位的三个分量提表示。这里不同的色调(H)图中的像素值是用角度作单位的,当用8位表示时,256个值分布在[0,360]之间,所以相邻值的差是n(360/255)。其中n=0,1,…,255。
如果将RGB图转化为HSI图,亮度分量就和色度分量分开了,灰度图的增强方法就可以使用了。

二、基础知识

1、RGB到HSI转换

RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调,如图1所示。
图1  RGB与HSI模型示意图
RGB转换至HSI:
色调:在这里插入图片描述 ,其中,在这里插入图片描述
饱和度:在这里插入图片描述
亮度: 在这里插入图片描述
证明:
HSI模型采用三棱锥还是圆锥或者圆柱都没有影响,因为它们之间可以直接相互映射,所以三者是等价的。这里用三角形来证明。
假设RGB值已经归一化。归一化方法为:
在这里插入图片描述
即求出各个基色的强度所占的比例。注意到r,g,b实际上代表了各个三原色的强度占总体的比例,所以显然满足如下条件:
在这里插入图片描述
图2  HSI彩色三角模型与彩色立体模型

图3  HSI彩色三角模型推导图示

另外仔细观察上图中的正三棱锥上的面PBPGPR,该平面上的任意一点都代表了R值G值B值满足比例条件的色点。比如该平面上的点(0.5,0.2,0.3)代表的所R:G:B=0.5:0.2:0.3的点。

2、HSI到RGB转换

在[0,1]内给出HSI值,现在要在相同的值域找到RGB值,可利用H值公式。在原始色分割中有3个相隔120度的扇形,从H乘以360开始,这时色调值返回原来的[0,360]的范围。
RG扇形(0<H<120):当H位于这一扇形区时,RGB分量由下式给出:
在这里插入图片描述
GB扇区(120<H<240):如果给定的H值在这一扇区,首先从H中减去120,即:H=H-120。RGB分量为:
在这里插入图片描述
BR扇区(240<H<360):最后,如果H在这一扇区,从H中减去240:H=H-240。RGB分量为:
在这里插入图片描述
其证明过程即为由RGB图像转换为HSI图像的逆过程。

3、灰度变换增强的方法

灰度变换法可分为:线性、分段线性和非线性变换。
(1)线性灰度变换
原理:当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清。这时如将图像灰度线性扩展,常能显著改善图像的主观质量。假设原图像f(x,y)的灰度范围是[a,b],希望变换后图像的灰度范围扩展到[c,d],则可采用如下的线性变换来实现:
在这里插入图片描述
其中Mj表示f(x,y)的最大值。该线性灰度变换函数是个一维线性函数

在灰度的线性变换中,当a>1时,输出图像的对比度将增大;当a<1时,输出图像的对比度将减小;当a=1且b≠0时,所进行的操作仅使 所有像素的灰度值上移或下移,其效果是使整个图像更暗或更亮;如果a<0,则暗区域将变亮,亮区域将变暗。
(2)分段线性灰度变换
为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,可采用分段线性法。常用的是三段线性变换。分段线性变换称为图像直方图的拉伸,它与完全线性变换类似,其不同之处在于其变换函数是分段的。其变换函数表达式如下:
在这里插入图片描述
灰度拉伸可以更加灵活地控制输出灰度直方图的分布,它可以有选择地拉伸某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间来改善图像质量。
(3)对数函数灰度变换
当用某些非线性函数作为图像的映射函数时,可实现图像灰度的非线性变换,如利用对数函数、指数函数等可实现对数变换和指数变换。对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的。变换方法由下式给出:

这里的对数变换,底数为v+1,实际计算的时候,需要用换底公式。底数越大,对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强调高灰度部分,则用反对数函数就可以了。

三、真彩色增强方法

图4 真彩色增强原理图

1、对HSI图像亮度增强

(1)将RGB图转化为HSI图;
(2)利用对灰度图增强的方法增强其中的I分量;
(3)再将结果转化为用RGB图来显示。

2、对HSI图像饱和度增强

(1)将RGB图转化为HSI图;
(2)增强其中的S分量;
(3)再将结果转化为用RGB图来显示。

3、对HSI图像饱和度与亮度增强

(1)将RGB图转化为HSI图;
(2)增强其中的I与S分量;
(3)再将结果转化为用RGB图来显示。

4、直接对RGB图像增强

(1)将RGB图像分解为R、G、B三分量图;
(2)分别对R、G、B三基色进行直方图修改;
(3)增强后再合成RGB图像。

四、程序设计

1、对HSI图像线性变换增强亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
I =I*1.4; 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('线性变换增强亮度后的rgb图像') 
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

2、对HSI图像分段线性变换增强亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if I<50
    I=I*1.1;
end
if 50<=I<=200;
    I=I*1.4;
end
if I>=200;
    I=I*1.1;
end 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强亮度后的rgb图像') 

3、对HSI图像线性变换增强对比度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0; 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('仅增强饱和度后的rgb图像')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

4、对HSI图像对数变换增强对比度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
    S=S*1.5;
end
if 50<=S<=200;
    S=S*2.0;
end
if S>=200;
    S=S*1.5;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强饱和度后的rgb图像')  

5、对HSI图像线性变换增强饱和度与亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0;
I=I*1.4;
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure; 
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('增强饱和度')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

6、对HSI图像分段线性变换增强饱和度与亮度

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
    S=S*1.5;
end
if 50<=S<=200;
    S=S*2.0;
end
if S>=200;
    S=S*1.5;
end
if I<50
    I=I*1.1;
end
if 50<=I<=200;
    I=I*1.4;
end
if I>=200;
    I=I*1.1;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强亮度及饱和度后的rgb图像') 

7、对RGB图像直接线性变换进行彩色增强

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p); 
r(:,:,3)=zeros(o,p);
r=r*1.4;
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p); 
g(:,:,3)=zeros(o,p);
g=g*1.4;
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p); 
b(:,:,1)=zeros(o,p);
b=b*1.4;
rgb_new(:,:,1)=r(:,:,1); 
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(121);imshow(rgb);title('原始rgb图像');  
%subplot(231);imshow(r);title('红色分量图像');
%subplot(232);imshow(g);title('绿色分量图像');
%subplot(233);imshow(b);title('蓝色分量图像');
subplot(122);imshow(rgb_new);title('增强后rgb图像'); 

8、对RGB图像直接分段线性变换进行彩色增强

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p); 
r(:,:,3)=zeros(o,p);
r=imadjust(r,[0.2 0.8],[0,1]);
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p); 
g(:,:,3)=zeros(o,p);
g=imadjust(g,[0.2 0.8],[0,1]);
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p); 
b(:,:,1)=zeros(o,p);
b=imadjust(b,[0.2 0.8],[0,1]);
rgb_new(:,:,1)=r(:,:,1); 
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(221);imshow(rgb_new);title('分段线性变换增强后rgb图像'); 

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

形态学图像处理

阅读数 2641

医学图像处理综述

阅读数 838

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