Matlab图像处理

  • 1. 图像的数据结构
    • 1.1 矩阵
    • 1.2 链码
    • 1.3 拓扑结构
    • 1.4 关系结构
  • 2. Matlab 图像处理
    • 2.1 图像处理工具箱
    • 2.2 图像类型的转换
    • 2.3 图像文件的读写
    • 2.4 图像点运算
    • 2.5 图像的空间变换
  • 3. 图像增强
    • 3.1 目的
    • 3.2 空域内的图像增强
    • 3.3 图像的统计特性
    • 3.4 绘制灰度图像等高线
    • 3.5 空域滤波
    • 3.6 频域滤波
    • 补充 [图像滤波](https://ww2.mathworks.cn/help/images/linear-filtering.html)
  • 4 图像复原
    • 4.1 噪声模型
    • 4.2 空域滤波复原方法
    • 4.3 图像复原方法
  • 5 图像分割技术
    • 5.1 边缘分割技术
    • 5.2 阈值分割
    • 5.3 区域分割
  • 6 图像变换技术
    • 6.1 Radon变换和反变换`radon()&iradon()`
    • 6.2 傅里叶变换和反变换`fft()&ifft()`
    • 6.3 离散余弦变换和反变换
    • 6.4 其他变换
  • 7 彩色图像处理

注:某些函数有些过时

1. 图像的数据结构

1.1 矩阵

  1. 黑白图像
  • 矩阵中元素取值只有0、1
  • 0表示黑色,1表示白色
  • 黑白图像又叫二值图或二进制图

I=[110011101]I= \left[ \begin{matrix} 1&1&0 \\ 0&1&1 \\ 1&0&1 \end{matrix} \right] I=⎣⎡​101​110​011​⎦⎤​

  1. 灰度图像
  • 矩阵的元素由一个量化的灰度级表示,通常为8位,即0~255
  • 0表示黑色,1表示白色
  1. 彩色图像
  • RGB图像由红、绿、蓝组成
  • RGB图像的每个像素都是由不同灰度级的红、绿、蓝描述的
  • 每种单色的描述与灰度图像描述相同

1.2 链码

  • 用于描述图像边界
  • 按标准方向的斜率分为4向链码、8向链码
  • 图像的描述与起始点的选择有关,标记起点坐标,其余用线段的方向数表示
  • 链码归一化:将链码看作自然数,将最小的自然数看作归一化的结果

1.3 拓扑结构

  • 用于描述图像的基本结构
  • 相邻:一个像素与其周围像素组成邻域
  • p周围有8个相邻像素点

只考虑上下左右:4-邻域

r
r p r
r

只考虑对角:对角邻域

s s
p
s s

考虑全部:8-邻域

s r s
r p r
s r s

1.4 关系结构

用于描述一组目标物体之间的相互关系

  • 串描述

    • 适用于描述可从头到尾或其他连续形式的图像元素
    • 链码基于串描述思想
  • 树描述
    • 能够描述不连接区域
#mermaid-svg-5DfQ9bDMKtb2f9sZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .label text{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .node rect,#mermaid-svg-5DfQ9bDMKtb2f9sZ .node circle,#mermaid-svg-5DfQ9bDMKtb2f9sZ .node ellipse,#mermaid-svg-5DfQ9bDMKtb2f9sZ .node polygon,#mermaid-svg-5DfQ9bDMKtb2f9sZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .node .label{text-align:center;fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .node.clickable{cursor:pointer}#mermaid-svg-5DfQ9bDMKtb2f9sZ .arrowheadPath{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edgeLabel rect{opacity:0.9}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edgeLabel span{color:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .cluster text{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-5DfQ9bDMKtb2f9sZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-5DfQ9bDMKtb2f9sZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .actor-line{stroke:grey}#mermaid-svg-5DfQ9bDMKtb2f9sZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sequenceNumber{fill:#fff}#mermaid-svg-5DfQ9bDMKtb2f9sZ #sequencenumber{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .messageText{fill:#333;stroke:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-5DfQ9bDMKtb2f9sZ .labelText,#mermaid-svg-5DfQ9bDMKtb2f9sZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .loopText,#mermaid-svg-5DfQ9bDMKtb2f9sZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-5DfQ9bDMKtb2f9sZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-5DfQ9bDMKtb2f9sZ .noteText,#mermaid-svg-5DfQ9bDMKtb2f9sZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-5DfQ9bDMKtb2f9sZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .section{stroke:none;opacity:0.2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .section2{fill:#fff400}#mermaid-svg-5DfQ9bDMKtb2f9sZ .section1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sectionTitle0{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sectionTitle1{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sectionTitle2{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sectionTitle3{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-5DfQ9bDMKtb2f9sZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .grid path{stroke-width:0}#mermaid-svg-5DfQ9bDMKtb2f9sZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .task{stroke-width:2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .task.clickable{cursor:pointer}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskText3{fill:#fff}#mermaid-svg-5DfQ9bDMKtb2f9sZ .task0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .task1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .task2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutside0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutside2{fill:#000}#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutside1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .taskTextOutside3{fill:#000}#mermaid-svg-5DfQ9bDMKtb2f9sZ .active0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .active1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .active2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeText0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeText1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeText2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeText3{fill:#000 !important}#mermaid-svg-5DfQ9bDMKtb2f9sZ .done0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .done1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .done2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneText0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneText1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneText2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneText3{fill:#000 !important}#mermaid-svg-5DfQ9bDMKtb2f9sZ .crit0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .crit1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .crit2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCrit0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCrit1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCrit2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCrit0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCrit1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCrit2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-5DfQ9bDMKtb2f9sZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .milestoneText{font-style:italic}#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCritText0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCritText1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCritText2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .doneCritText3{fill:#000 !important}#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCritText0,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCritText1,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCritText2,#mermaid-svg-5DfQ9bDMKtb2f9sZ .activeCritText3{fill:#000 !important}#mermaid-svg-5DfQ9bDMKtb2f9sZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.clickable{cursor:pointer}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-5DfQ9bDMKtb2f9sZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .dashed-line{stroke-dasharray:3}#mermaid-svg-5DfQ9bDMKtb2f9sZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ .commit-id,#mermaid-svg-5DfQ9bDMKtb2f9sZ .commit-msg,#mermaid-svg-5DfQ9bDMKtb2f9sZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-5DfQ9bDMKtb2f9sZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-5DfQ9bDMKtb2f9sZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-5DfQ9bDMKtb2f9sZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-5DfQ9bDMKtb2f9sZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edgeLabel text{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-5DfQ9bDMKtb2f9sZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-5DfQ9bDMKtb2f9sZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-5DfQ9bDMKtb2f9sZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-5DfQ9bDMKtb2f9sZ .note-edge{stroke-dasharray:5}#mermaid-svg-5DfQ9bDMKtb2f9sZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-5DfQ9bDMKtb2f9sZ .error-icon{fill:#522}#mermaid-svg-5DfQ9bDMKtb2f9sZ .error-text{fill:#522;stroke:#522}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-5DfQ9bDMKtb2f9sZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-5DfQ9bDMKtb2f9sZ .marker{fill:#333}#mermaid-svg-5DfQ9bDMKtb2f9sZ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-5DfQ9bDMKtb2f9sZ {color: rgba(0, 0, 0, 0.75);font: ;}

子树1
子树2
子树3
子树4
子树5
叶子

2. Matlab 图像处理

2.1 图像处理工具箱

2.2 图像类型的转换

  1. RGB图像转换为灰度图像: X=rgb2gray(I)

  2. RGB图像转换为索引图像: X=rgb2ind(I)
    还可以输入参数项dither_option,选择是否使用抖动

    RGB图像一个像素占用三个字节, 分别存储R、G、B分量的值,而索引图像一个像素占用一个字节
    索引模式主要用于网络上的图片传输和一些对图像象素、大小等有严格要求的地方

  3. 灰度图像转换为索引图像

  • [X,map]=gary2ind(I,n)

    • I指原灰度图像,n为灰度等级,默认为64
    • [X,map]对应转换后的索引图像,map中对应的颜色值为gray(n)中的颜色值
  • [X,map]=gary2ind(BW,n)
    • BW指原二值图像,n为灰度等级,默认为2
  1. 索引图像转换为灰度图像:I=ind2gray(X,map)
    输入图像的数据类型可以是double型或unit8型,但输出为double型

  2. 索引图像转换为RGB图像:RGB=ind2rgb(X,map)
    输入图像的数据类型可以是double型、unit8型或unit16型,但输出为double型

  3. 二值图像的转换:im2bw()

  • 在MATLAB中,二值图像的数据类型为logical型,黑:0、白:1
  • 阈值法:大于阈值取1、小于阈值取0
  • im2bw()若输入的不是灰度图像,先将其转换为灰度图,再通过阈值法转换为二值图
  1. 数据矩阵转换为灰度图像:mat2gray(X,[xmin,xmax])
  • 按指定的取值范围 [xmin,xmax] 将数据矩阵X转换为灰度图I。xmin对应灰度值0,即黑色;xmax对应灰度值1,即白色。小于xmin的取0,大于xmax的取1。
  • 如果不指定[xmin,xmax],将矩阵X中最大值设为xmax,最小值设为xmin。

2.3 图像文件的读写

  1. 图像文件信息读取 INFO=imfinfo('filename','fmt')INFO=imfinfo('filename,fmt')
  • filename为文件名,fmt为文件扩展名
  • INFO是一个结构数组,基本内容如下
结构数组成员名 所代表含义
Filename 文件名称
FileMoDate 文件最后修改日期和时间(日-月-年 时:分:秒)
FileSize 文件大小(子节)
Format 文件扩展名
FormatVersion 文件格式版本号
Width 图像宽度(像素)
Height 图像高度(像素)
BitDepth 每个像素所占位宽
ColorType 图像类型
  1. 图像文件的读取
A = imread(filename)
A = imread(filename,fmt)
A = imread(___,idx)
A = imread(___,Name,Value)
[A,map] = imread(___)
[A,map,transparency] = imread(___)
  • A = imread(filename) 从 filename 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。
  • A = imread(filename,fmt) 另外还指定具有 fmt 指示的标准文件扩展名的文件的格式。如果 imread 找不到具有 filename 指定的名称的文件,则会查找名为 filename.fmt 的文件。
  • A = imread(___,idx) 从多图像文件读取指定的图像。此语法仅适用于 GIF、PGM、PBM、PPM、CUR、ICO、TIF、SVS 和 HDF4 文件。您必须指定 filename 输入,也可以指定 fmt。
  • A = imread(___,Name,Value) 使用一个或多个名称-值对组参数以及先前语法中的任何输入参数来指定格式特定的选项。
  • [A,map] = imread(___) 将 filename 中的索引图像读入 A,并将其关联的颜色图读入 map。图像文件中的颜色图值会自动重新调整到范围 [0,1] 中。
  • [A,map,transparency] = imread(___) 另外还返回图像透明度。此语法仅适用于 PNG、CUR 和 ICO 文件。对于 PNG 文件,如果存在 alpha 通道,transparency 会返回该 alpha 通道。对于 CUR 和 ICO 文件,它为 AND(不透明度)掩码。
  1. 图像文件的保存
imwrite(A,filename)
imwrite(A,map,filename)
imwrite(___,fmt)
imwrite(___,Name,Value)
  • imwrite(A,filename) 将图像数据 A 写入 filename 指定的文件,并从扩展名推断出文件格式。imwrite 在当前文件夹中创建新文件。输出图像的位深取决于 A 的数据类型和文件格式。对于大多数格式来说:
  • 如果 A 属于数据类型 uint8,则 imwrite 输出 8 位值。
  • 如果 A 属于数据类型 uint16 且输出文件格式支持 16 位数据(JPEG、PNG 和 TIFF),则 imwrite 将输出 16 位的值。如果输出文件格式不支持 16 位数据,则 imwrite 返回错误。
  • 如果 A 是灰度图像或者属于数据类型 double 或 single 的 RGB 彩色图像,则 imwrite 假设动态范围是 [0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
  • 如果 A 属于 logical 数据类型,则 imwrite 会假定数据为二值图像并将数据写入位深为 1 的文件(如果格式允许)。BMP、PNG 或 TIFF 格式以输入数组形式接受二值图像。
  • 如果 A 包含索引图像数据,则应另外指定 map 输入参数。
  • imwrite(A,map,filename) 将 A 中的索引图像及其关联的颜色图写入由 map filename 指定的文件。
  • 如果 A 是属于数据类型 double 或 single 的索引图片,则 imwrite 通过从每个元素中减去 1 来将索引转换为从 0 开始的索引,然后以 uint8 形式写入数据。
  • 如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
  • imwrite(___,fmt) 以 fmt 指定的格式写入图像,无论 filename 中的文件扩展名如何。您可以在任何先前语法的输入参数之后指定 fmt。
  • imwrite(___,Name,Value) 使用一个或多个名称-值对组参数,以指定 GIF、HDF、JPEG、PBM、PGM、PNG、PPM 和 TIFF 文件输出的其他参数。您可以在任何先前语法的输入参数之后指定 Name,Value。
  1. 图像文件的显示
  • 常用imshow(),也可用imtool()
  • 像素信息的显示
    • impixel():返回像素或像素集的数据值,可将像素坐标作为函数的输入参数,也可以用鼠标选中像素
    • impixelinfo():在当前显示的图像中创建一个像素信息工具,可显示鼠标光标所在像素点的信息,并且可以显示图像窗口中所有图像的像素信息
  1. 视频文件的读写(略):
    aviread()(旧版本)、aviinfo()(旧版本)、movie()
    mmfileinfommreader()read()

2.4 图像点运算

  • 点运算又称为对比度增强、对比度拉伸或灰度转换
  • 输出图像每个点的灰度值仅由对应的输入像素点决定
  • 运算不改变图像内像素点之间的空间关系
    B(x,y)=f[A(x,y)]B(x,y)=f[A(x,y)]B(x,y)=f[A(x,y)]
  • A为原图像,B为处理后的图像
  • 按数学关系分为线性灰度变换、分段线性灰度变换和非线性灰度变换

2.5 图像的空间变换

  • imwarp()
B = imwarp(A,tform)
B = imwarp(A,D)
[B,RB] = imwarp(A,RA,tform)
[___] = imwarp(___,interp)
[___] = imwarp(___,Name,Value)
  • B = imwarp(A,tform) 根据几何变换 tform 来变换数值、逻辑或分类图像 A。该函数在 B 中返回变换后的图像。
  • B = imwarp(A,D) 根据位移场 D 变换图像 A。
  • [B,RB] = imwarp(A,RA,tform) 变换由图像数据 A 指定的空间参照图像及其关联的空间参照对象 RA。输出是由图像数据 B 指定的空间参照图像及其关联的空间参照对象 RB。
  • [___] = imwarp(___,interp) 指定要使用的插值的类型。
  • [___] = imwarp(___,Name,Value) 指定名称-值对组参数来控制几何变换的各个方面。
imcrop 裁剪图像
imcrop3 Crop 3-D image
imresize 调整图像大小
imresize3 Resize 3-D volumetric intensity image
imrotate 旋转图像
imrotate3 Rotate 3-D volumetric grayscale image
imtranslate Translate image 转换图像
impyramid Image pyramid reduction and expansion 对图像进行成倍的放大与缩小

3. 图像增强

3.1 目的

  • 提高图像质量和可辨识度
  • 图像质量
    • 逼真度:被评价图像与原标准图像的偏离程度
    • 可懂度:图像能向人或机器提供信息的能力

3.2 空域内的图像增强

调整灰度图像的明暗对比度

  • 灰度变换增强

    • 只改变像素点灰度值
    • imhist()获取直方图
  • 直方图增强
    是根据输入图像的灰度概率分布来确定其对应的输出灰度值,通过扩展图像的动态范围达到提升图像对比度的目的

    • 直方图均衡化:J=histeq(I)
    • 直方图规定化: hgram=ones(1,256); J=histeq(I);
  • 通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图
  • 有时并不需要图像的直方图具有整体的均匀分布(均衡化),而希望直方图与规定要求的直方图一致,这就是直方图规定化。可以增强特定灰度级分布范围内的图像

3.3 图像的统计特性

  • 均值:mean()

    • mean(A,dim)

      • dim=1,对列求平均值;mean(A,1)=mean(A)
      • dim=2,对行求平均值
    • mean2(A)=mean(mean(A))
  • 方差:std()

  • 标准差:std2()

  • 二维相关系数:corr2()

3.4 绘制灰度图像等高线

  • imcontour(I,n):I为灰度图像的二维数据矩阵;指定等高线条数为n,缺省则函数自动选取

3.5 空域滤波

对图像中每个像素为中心的邻域进行一系列的运算,然后将得到的结果代替原来的像素值。

  • 线性空域滤波

    • 线性平均滤波(常见)
      常用模板大小:3×3
      h=15[010111010]h=\frac{1}{5}\left[ \begin{matrix} 0&1&0\\ 1&1&1\\ 0&1&0 \end{matrix} \right] h=51​⎣⎡​010​111​010​⎦⎤​
      f′(x)=15[f(x,y−1)+f(x−1,y)+f(x,y)+f(x+1,y)+f(x,y+1)]f'(x)=\frac{1}{5}[f(x,y-1)+f(x-1,y)+f(x,y)+f(x+1,y)+f(x,y+1)]f′(x)=51​[f(x,y−1)+f(x−1,y)+f(x,y)+f(x+1,y)+f(x,y+1)]
      J=imfilter(I,h);
  • 非线性空域滤波

    • 中值滤波:保护边缘的图像平滑方法

      • 二维中值滤波medfilt2()适用于去除图像中的椒盐噪声,平滑效果优于均值滤波
    • 顺序统计滤波
      B = ordfilt2(A, order, domain)

      • A :Input Marix (输入矩阵)
      • order:指明对于A中某个元素值,要用其邻域中的第几大的元素去替代这个元素的值
      • domain:过滤窗口的大小,0元素对应的位置不参与排序
    • 自适应滤波
      • 二维自适应滤波

        • J = wiener2(I,[m n],noise)

          • [m n] 指定用于估计局部图像均值和标准差的邻域的大小(m×n)
          • 加性噪声(高斯白噪声)功率假定为 noise
        • [J,noise_out] = wiener2(I,[m n])

          • 返回 wiener2 在进行滤波之前计算的加性噪声功率的估计值

3.6 频域滤波

频域增强:将图像经傅里叶变换,从空间域变换到频率域fft2(),然后在频域内进行处理,最后再反变换回空间域ifft2()

  • 低通滤波:通过低频,衰减抑制高频。使图像去噪声平滑,但会抑制边界。理想滤波器、巴特沃兹滤波器、高斯滤波器
  • 高通滤波:衰减抑制低频,通过高频。锐化,突出边界,但会丢失必要信息。为了既加强图像的细节又抑制噪声,可采用高频加强滤波。由一个高通滤波器和一个全通滤波器构成
  • 带阻滤波:用来抑制距离频域中心一定距离的一个圆环区域的频率,用来消除一定频率范围的周期噪声
  • 同态滤波:压缩灰度动态范围,增强对比度

补充 图像滤波

修正或增强图像,包括平滑、锐化和边缘增强。
O(i,j)=∑m,nI(i+m,j+n)∗K(m,n)O(i,j) = \sum_{m,n}^{ }I(i+m,j+n)*K(m,n) O(i,j)=m,n∑​I(i+m,j+n)∗K(m,n)

  • 均值滤波:用其像素点周围像素的平均值代替元像素值,但会过滤掉图像的边缘信息。

    • 算术均值滤波器
    • 几何均值滤波器
  • 中值滤波:用测试像素周围邻域像素集中的中值代替原像素,适用于去除椒盐噪声和斑块噪声
  • 高斯滤波:平滑图像,依据距离来加权平均
    • 权重:
      一维高斯:f(x)=1σ2πe−x22σ2f(x) = \frac{1}{\sigma\sqrt{2\pi }}{e}^{\frac{-x^{2}}{2\sigma^2}}f(x)=σ2π​1​e2σ2−x2​
      二维高斯:KaTeX parse error: Undefined control sequence: \siga at position 26: …frac{1}{{2\pi }\̲s̲i̲g̲a̲^2}{e}^{\frac{-…
    • 边界处理:把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵
  • 双边滤波:相较高斯滤波能更好的保存图像边缘信息。
    • 一个与空间距离相关的高斯核函数与一个灰度距离相关的高斯函数相乘
      空间距离:e−(xi−xc)2+(yi−yc)22σ2e^{-\frac{(x_i-x_c)^2+(y_i-y_c)^2}{2\sigma^2}}e−2σ2(xi​−xc​)2+(yi​−yc​)2​
      灰度距离:e−(gray(xi,yi)−gray(xc,yc))22σ2e^{-\frac{(gray(x_i,y_i)-gray(x_c,y_c))^2}{2\sigma^2}}e−2σ2(gray(xi​,yi​)−gray(xc​,yc​))2​

4 图像复原

沿图像退化逆过程进行处理,达到抑制噪声,改善图像质量的目的。

4.1 噪声模型

  • 分类

    • 加性噪声
    • 乘性噪声
  • 图像添加噪声:g = imnoise(f, type, parameters)

    • g是被污染的图像
    • f是输入的原图像
    • type是加入的噪声类型
      • ‘gaussian’:高斯噪声
      • ‘localvar’:0均值白噪声
      • ‘poisson’:泊松噪声
      • ‘solt & pepper’:椒盐噪声
      • ‘speckle’:乘性噪声
    • parameters是噪声的一些参数

4.2 空域滤波复原方法

  • 均值滤波:用其像素点周围像素的平均值代替元像素值,但会过滤掉图像的边缘信息。

    • 算术均值滤波器
    • 几何均值滤波器
  • 顺序统计滤波
    • 中值滤波medfilt2():能很好地保留图像边缘,适合去除椒盐噪声,优于均值滤波
    • 最大值滤波:去除椒盐噪声,但会从黑色物体边缘去除一些黑色色素
    • 最小值滤波:去除椒盐噪声,但会从白色物体边缘去除一些白色色素
  • 自适应滤波wiener2():使用像素级自适应低通 Wiener 滤波器对灰度图像 I 进行滤波

4.3 图像复原方法

  • 逆滤波复原

    • 逆滤波:通过的傅立叶反变换得到图像的估计值
    • 逆滤波是一种非约束复原方法
    • 非约束复原:在已知退化图像的情况下,根据对退化模型和噪声的一些知识,做出对原图像的估计,使得某种事先确定的误差准则为最小
  • 维纳滤波复原deconvwnr():计算量低、抗噪声性能好
  • 约束最小二乘法复原deconvreg()
  • Lucy-Richardson复原deconvlucy()
  • 盲解卷积复原deconvblind()

5 图像分割技术

5.1 边缘分割技术

利用物体和背景在某种图像特性上的差异

  • 图像中的线段

    • 间断点检测模板
      [−1−1−1−18−1−1−1−1]\left[ \begin{matrix} -1&-1&-1\\ -1&8&-1 \\ -1&-1&-1\\ \end{matrix} \right] ⎣⎡​−1−1−1​−18−1​−1−1−1​⎦⎤​
    • 线段检测模板
      [−1−1−1222−1−1−1][−1−12−12−12−1−1][−12−1−12−1−12−1][2−1−1−12−1−1−12]\left[ \begin{matrix} -1&-1&-1\\ 2&2&2 \\ -1&-1&-1\\ \end{matrix} \right] \left[ \begin{matrix} -1&-1&2\\ -1&2&-1 \\ 2&-1&-1\\ \end{matrix} \right] \left[ \begin{matrix} -1&2&-1\\ -1&2&-1 \\ -1&2&-1\\ \end{matrix} \right] \left[ \begin{matrix} 2&-1&-1\\ -1&2&-1 \\ -1&-1&2\\ \end{matrix} \right] ⎣⎡​−12−1​−12−1​−12−1​⎦⎤​⎣⎡​−1−12​−12−1​2−1−1​⎦⎤​⎣⎡​−1−1−1​222​−1−1−1​⎦⎤​⎣⎡​2−1−1​−12−1​−1−12​⎦⎤​
  • 微分算子法 e.g.J=edge(I,'roberts',35/255)
    • Roberts算子:对于离散图像,边缘检测算子用图像的垂直和水平差分来逼近梯度算子,返回二值图像
    • Prewitt算子:可用来检测水平、垂直边缘,返回二值图像
    • Sobel算子:可分别检测水平、垂直边缘
  • Canny算子edge(I,'canny'):低误码率、高定位精度和抑制虚假边缘
  • LOG算子:先采用高斯函数对图像进行平滑,再采用拉普拉斯算子监测图像的边缘。具有边界定位精度高、抗干扰能力强、连续性强等优点

5.2 阈值分割

  • 全局阈值:通过全局信息设立阈值

    • 整个图像分为目标对象(黑色)和背景对象(白色),全局阈值将整个图像的灰度阈值设置为常数
    • 对于物体和背景对比比较明显的图像,其灰度直方图为双峰形状,可以选择两峰之间的波谷对应的像素值做为全局阅值
  • OTSU阈值分割(大津法、最大类间方差法):以最佳阈值将图像的灰度值分割成两部分,使两部分之间的方差最大,即具有最大的分离性,不受图像亮度和对比度的影响
  • 迭代式國值分割(比较有效)

5.3 区域分割

  • 区域生长法:将具有相似性质的像素集合起来构成区域,相似性度量可以包括平均灰度值、纹理、颜色等信息
  • 分水岭法watershed()

6 图像变换技术

图像某些性质在空间域很难获得,故将图像从空间域变换到变换域处理后再反变换。

6.1 Radon变换和反变换radon()&iradon()

获取平移旋转投影数据

6.2 傅里叶变换和反变换fft()&ifft()

从空间域转换为频率域,可进行图像分析、增强和压缩。
傅里叶变换物理意义:将图像的灰度分布函数变换为图像的频率分布函数
fft():一维离散傅里叶变换
fft2():二维离散傅里叶变换=fft(fft())
fftshift():平移

6.3 离散余弦变换和反变换

以一组不同频率和幅值的余弦函数和来近似一幅图像,实际上是傳立叶变换的实数部分
对于一幅图像,其大部分可视化信息都集中在少数的变换系数上。因此,离散余弦变换经常用于图像压缩,例如国际压缩标准的JPEG格式
图像块操作:blkproc()

6.4 其他变换

Hadamard变换、Hough变换(图像识别几何形状)以及图像的小波变换等

7 彩色图像处理

Matlab图像处理(入门笔记)相关推荐

  1. matlab bwmorph spur,matlab图像处理学习笔记-数学形态与二值图像操作

    matlab图像处理学习笔记-数学形态与二值图像操作 数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单. 9.1 数学形态学图像处理 基本思想:利用一个称作结构元素(structurin ...

  2. Matlab 图像处理入门学习笔记—1.图片格式转换

    前言:作为一个编程思维极弱的小白,就算是matlab的学习也稍有困难.但也想学好自己选择的路.从最简单的开始,记录学习,也算监督自己. 今天的笔记是图片格式转换,废话不说,直接上代码: a=512; ...

  3. 如何用matlab分割颜色,Matlab图像处理学习笔记(二):基于颜色的图像分割

    在实际处理图像时,经常需要对图像进行分割,然后提取ROI,本学习笔记记录怎么用Matlab实现基于颜色的图像分割. 基于颜色的图像分割实现简单,算法简洁,具有很好的实时性. 实现代码的过程中,我参考了 ...

  4. surf程序 matlab,Matlab图像处理学习笔记(七):surf特征点

    本文主要演示如何使用matlab自带的Computer Vision System Toolbox这个工具箱进行suft特征点的检测.匹配及显示.这个工具箱是matlab2012b及之后才有的一个工具 ...

  5. matlab图像处理学习笔记(1):matlab中double、im2double、mat2gray区别

    声明:本文转载自http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html,仅为交流学习. ****************假设某图像数据A(uint8格 ...

  6. matlab人民币识别,Matlab图像处理学习笔记(六):基于sift特征点的人民币识别...

    本文记录如何利用sift特征点进行人民币的识别.本文给出的matlab源码识别了1元与100元人民币的面额,相同思路,可以对各种币值的人民币进行面额.正反面的识别.但由于本程序采用串行,模板数的增多会 ...

  7. matlab图像处理学习笔记

    因为大四的项目设计是关于图像切割,具体题目是 airway segementation,也就是肺气道树的切割算法.实现语言是matlab,虽然已经转了计算机,matlab以后会很少接触,但是为了完成项 ...

  8. MATLAB图像处理入门

    一.读写图像.直方图 1.读取并显示图像 imread与imshow函数 clc;clear; close all; I = imread('pout.tif'); imshow(I); 结果: 如果 ...

  9. matlab图像处理(笔记)

    目录 图像类型的转换 图像文件读写 视频文件读写 数字图像的运算 图像的几何变换 图像类型的转换 RGB图像转为灰度图像:X=rgb2gray(I) %I为RGB图像,X为转换后的图像 RGB图像转换 ...

  10. Matlab图像处理入门教程(菜鸟级)

    1,图像的读入和显示: (1)图像读入:A=imread('文件名',文件格式) [X,map]=imread('文件名') %X代表索引图像矩阵,map为颜色映射表 (2)图像显示:image(A) ...

最新文章

  1. CVPR 2021 | 超越卷积,自注意力模型HaloNet准确率实现SOTA
  2. 烂泥:nginx、php-fpm、mysql用户权限解析
  3. 工作中的感悟 (一)初来工作之感
  4. python迅雷远程下载页面_【教程】Chrome浏览器添加迅雷下载支持
  5. 实战项目四:爬取911网站
  6. 蓝桥杯 - 试题 J: 砍竹子(双向链表+堆/思维)
  7. 为什么年事已高的我还在编程?
  8. CSS3实现的响应式字体:自适应视图窗口大小的新单位
  9. Linux系统如何连接和上传文件到服务器上
  10. hpux11.31环境,vgmodify: This operation can only be completed if PE number zero的解决办法
  11. PCL—低层次视觉—点云滤波(基于点云频率)
  12. 通用数据链接(UDL)的用法
  13. 浅谈人工智能(AI)
  14. android 健身定时器,健身计时器Runtastic Timer
  15. 【Android取证篇】一键分析APK利器-APK Messenger
  16. K8s 中 iptables 和ipvs 的理解
  17. 名帖299 王铎 行书《书法册页李贺诗四首》
  18. 超150亿元市场启动!智能汽车中间件出圈背后仍存挑战
  19. 2015年英语专升本英语阅读「Part II 阅读专区」【文章(图片)、答案、词汇记忆】
  20. 《全球互联网金融商业模式:格局与发展》——第3章,第4节互联网保险服务公司...

热门文章

  1. 小米手机开启Root权限
  2. 如何在Ubuntu 20.04上安装和使用Docker
  3. halcon代码LAWS纹理滤波
  4. android中java中的开方
  5. 【第16周复盘】学习的飞轮
  6. 今天你的人生做减法了吗?
  7. C# 根据主机名称获得IP
  8. 计算机页面里的坚果云删不了怎么回事,坚果云 常见问题
  9. USB数据线串联电阻知识总结
  10. 使用R语言制作树状图