Matlab实现彩色图像的转换 平滑 锐化与分割

本文涉及的产品
简介: Matlab实现彩色图像的转换 平滑 锐化与分割
文章和代码以及样例图片等相关资源,已经归档至【Github仓库: digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。

目的

  1. 使用 RGB、索引和灰度级图像间转换的函数
  2. 掌握彩色图像平滑的MATLAB 仿真
  3. 彩色图像锐化
  4. RGB 彩色图像分割

内容

1.使用 RGB、索引和灰度级图像间转换的函数

clc
f=imread('D:\pic\DIP3E_CH06\Fig0651(a)(flower_no_compression).tif');
imshow(f)
title('原图像');

[X1,map1]=rgb2ind(f,8,'nodither');
figure
imshow(X1,map1);%无抖动处理的颜色数减少到8 的图像
title('无抖动处理的颜色数减少到8 的图像');

[X2,map2]=rgb2ind(f,8,'dither');
figure
imshow(X2,map2)%有抖动处理的颜色数减少到8 的图像
title('有抖动处理的颜色数减少到8 的图像');

g=rgb2gray(f);
g1=dither(g);
figure,imshow(g);
title('使用函数rgb2gray 得到的原图像的灰度级图像');
figure,imshow(g1);
title('经抖动处理后的灰度图像(这是一幅二值图像)');

2.掌握彩色图像平滑的MATLAB 仿真

function hsi = rgb2hsi(rgb)

rgb=im2double(rgb);
r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);

num=0.5*((r-g)+(r-b));
den=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(num./(den+eps));

H=theta;
H(b>g)=2*pi-H(b>g);
H=H/(2*pi);

num=min(min(r,g),b);
den=r+g+b;
den(den==0)=eps;
S=1-3.*num./den;

H(S==0)=0;
I=(r+g+b)/3;

hsi=cat(3,H,S,I);

function rgb=hsi2rgb(hsi)
H=hsi(:,:,1)*2*pi;
S=hsi(:,:,2);
I=hsi(:,:,3);

R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));

idx=find((0<=H)&(H<2*pi/3));
B(idx)=I(idx).*(1-S(idx));
R(idx)=I(idx).*(1-S(idx).*cos(H(idx))./cos(pi/3-H(idx)));
G(idx)=3*I(idx)-(R(idx)+B(idx));

idx=find((2*pi/3<=H)&(H<4*pi/3));
R(idx)=I(idx).*(1-S(idx));
G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx)));
B(idx)=3*I(idx)-(R(idx)+G(idx));

idx=find((4*pi/3<=H)&(H<=2*pi));
G(idx)=I(idx).*(1-S(idx));
B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./cos(5*pi/3-H(idx)));
R(idx)=3*I(idx)-(G(idx)+B(idx));

rgb=cat(3,R,G,B);
rgb=max(min(rgb,1),0);

%%%%%%%%%%%主函数——图像平滑

clear all
clc
fc=imread('D:\pic\DIP3E_CH06\Fig0637(a)(caster_stand_original).tif');
imshow(fc)
h=rgb2hsi(fc);
H=h(:,:,1);%显示h 分量图像
figure,imshow(H)
title('H 分量')
S=h(:,:,2);
title('S 分量')
figure,imshow(S)
I=h(:,:,3);
figure,imshow(I)
title('I 分量')
w=fspecial('average',25);
I_filtered=imfilter(I,w,'replicate');
h=cat(3,H,S,I_filtered);
f=hsi2rgb(h);
figure,imshow(f)
f=min(f,1);%RGB images must have values in the range[0,1]
figure,imshow(f)

3.彩色图像锐化

clear all
clc
fc=imread('D:\pic\DIP3E_CH06\Fig0637(a)(caster_stand_original).tif');
imshow(fc)

lapmask=[1 1 1;1 -8 1;1 1 1];
fen=imsubtract(fc,imfilter(fc,lapmask,'replicate'));
figure,imshow(fen)

4.RGB 彩色图像分割

function [C,m]=covmatrix(X)

[K,n]=size(X);
X=double(X);
if n==1
    C=0; m=x;
else
    m=sum(X,1)/K;
    X=X-m(ones(K,1),:);
    C=(X'*X)/(K-1);
    m=m';
end

function I=colorseg(varargin)

f=varargin{2};
if(ndims(f)~=3)|(size(f,3)~=3)
    error('Input image must be RGB!');
end
M=size(f,1); N=size(f,2);
[f,L]=imstack2vectors(f);
f=double(f);
I=zeros(M*N,1);
T=varargin{3};
m=varargin{4};
m=m(:)';%make sure that m is a row vetor
if length(varargin)==4
    method='euclidean';
elseif length(varargin)==5
    method='mahalanobis';
else
    error('wrong number of inputs!');
end
switch method
    case 'euclidean'
        p=length(f);
        D=sqrt(sum(abs(f-repmat(m,p,1)).^2,2));
    case 'mahalanobis'
        C=varargin{5};
        D=mahalanobis(f,C,m);
    otherwise
        error('Unknown segmentation method!');
end

J=find(D<=T);
I(J)=1;
I=reshape(I,M,N);

function [X,R]=imstack2vectors(S,MASK)
[M,N,n]=size(S);
if nargin==1
    MASK=true(M,N);
else
    MASK=MASK~=0;
end
[I,J]=find(MASK);
R=[I,J];
Q=M*N;
X=reshape(S,Q,n);
MASK=reshape(MASK,Q,1);
X=X(MASK,:);


%%%%%%RGB 图像分割主程序
clear all
clc
f=imread('D:\pic\DIP3E_CH06\Fig0637(a)(caster_stand_original).tif');
mask=roipoly(f);
figure,imshow(mask)%mask 是一幅2 值图像(大小与f 相同)
red=immultiply(mask,f(:,:,1));
figure,imshow(red)
title('red 分量');

green=immultiply(mask,f(:,:,2));
figure,imshow(green)
title('green 分量');

blue=immultiply(mask,f(:,:,3));
figure,imshow(blue)
title('blue 分量');
g=cat(3,red,green,blue);
figure,imshow(g)

%计算ROI 中的点的均值向量和协方差矩阵
[M,N,K]=size(g);
I=reshape(g,M*N,3);
idx=find(mask);
I=double(I(idx,1:3));
[C,m]=covmatrix(I);

d=diag(C);
sd=sqrt(d)'
E25=colorseg('euclidean',f,25,m);
%colorseg('m',f,T,m)T 值可取的值为25 的倍数时得到的不同结果

参考文献:

[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.

[2] 阮秋琦. 数字图像处理(MATLAB版)[M]. 北京:电子工业出版社, 2014..pdf)

[3] 冈萨雷斯. 数字图像处理(第三版)[M]. 北京:电子工业出版社, 2011..pdf)

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据可视化
通过深度学习和人脸图像进行年龄段估计matlab仿真
通过深度学习和人脸图像进行年龄段估计matlab仿真
|
3月前
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
|
1月前
|
机器学习/深度学习 算法 网络架构
基于yolov2深度学习网络的人脸检测matlab仿真,图像来自UMass数据集
**YOLOv2算法在MATLAB2022a中实现人脸检测:** 展示6个检测结果图,利用Darknet-19进行特征提取,网络每个网格预测BBox,包含中心偏移、尺寸、置信度和类别概率。多任务损失函数结合定位、置信度和分类误差。程序加载预训练模型,遍历图像,对检测到的人脸以0.15阈值画出边界框并显示。
|
3月前
|
机器学习/深度学习 算法 数据可视化
python/matlab图像去雾/去雨综述
python/matlab图像去雾/去雨综述
40 0
|
2月前
|
算法
m基于OFDM+QPSK和LDPC编译码以及MMSE信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
MATLAB2022a仿真实现了无线图像传输的算法,包括OFDM、QPSK调制、LDPC编码和MMSE信道估计。OFDM抗频率选择性衰落,QPSK用相位表示二进制,LDPC码用于前向纠错,MMSE估计信道响应。算法流程涉及编码、调制、信道估计、均衡、解码和图像重建。MATLAB代码展示了从串行数据到OFDM信号的生成,经过信道模型、噪声添加,再到接收端的信道估计和解码过程,最终计算误码率。
22 1
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
3天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
5天前
|
算法 数据安全/隐私保护 数据格式
基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
该内容是一个关于混沌系统理论及其在图像加解密算法中的应用摘要。介绍了使用matlab2022a运行的算法,重点阐述了混沌系统的特性,如确定性、非线性、初值敏感性等,并以Logistic映射为例展示混沌序列生成。图像加解密流程包括预处理、混沌序列生成、数据混淆和扩散,以及密钥管理。提供了部分核心程序,涉及混沌序列用于图像像素的混淆和扩散过程,通过位操作实现加密。
|
8天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
14天前
|
机器学习/深度学习 文字识别 算法
MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正
MATLAB图像倾斜校正算法实现:图像倾斜角检测及校正
11 0

热门文章

最新文章