2016-06-20 11:21:24 sungo2012 阅读数 184
  • 区块链技术详解

    区块链技术入门教程,该课程对目前区块链知识进行一次体系化的讲解,使得初学者能迅速抓住区块链技术的核心思想,对区块链应用和智能合约有一个的、由浅入深的了解。

    12379 人正在学习 去看看 CSDN讲师

1、前言

最近及以后的较长时间都会记录图像处理相关东西,中间应该也会穿插其他工作。

对一些典型应用进行记录,不求大而全,但求小而精。先做简单记录,后续有机会可以进行慢慢完善。










参考文献

1、Visual C++ 数字图像模式识别典型案例详解

2、Visual C++数字图像处理技术详解


2019-08-22 09:57:02 weixin_42618420 阅读数 412
  • 区块链技术详解

    区块链技术入门教程,该课程对目前区块链知识进行一次体系化的讲解,使得初学者能迅速抓住区块链技术的核心思想,对区块链应用和智能合约有一个的、由浅入深的了解。

    12379 人正在学习 去看看 CSDN讲师

图像分割技术

图像分割 : 根据灰度 , 颜色 , 纹理等,将图像进行分割.

常用的分割技术 :

边缘检测法  阈值分割法  区域分割法

阈值分割法 : 是最经典最流行的图像分割方法之一 , 也是最简单的分割方法 . 其关键是找合适的灰度阈值. 通常是根据图像的灰度

直方图来选取. 阈值分割特别适用于目标和背景处于不同灰度级范围的图像.

边缘分割技术

微分算子, Canny 算子 , LOG算子

常见的微分算子 : Sobel算子  Roberts 算子  Prewit 算子

图像中线段检测

函数 imfilter ( )

I = imread('gantrycrane.png');
I = rgb2gray(I);
h1 = [-1 -1 -1; 2 2 2; -1 -1 -1]; %水平
h2 = [-1 -1 2; -1 2 -1; 2 -1 -1]; %+45度
h3 = [-1 2 -1; -1 2 -1; -1 2 -1]; %竖直
h4 = [2 -1 -1; -1 2 -1; -1 -1 2]; %-45度

J1 = imfilter(I, h1); %线段检测
J2 = imfilter(I, h2);
J3 = imfilter(I, h3);
J4 = imfilter(I, h4);

J = J1 + J2 + J3 + J4; %四条线段叠加
figure;
subplot(121),imshow(I);
subplot(122),imshow(J);

微分算子

Roberts算子

函数 edge ( )

I = imread('rice.png');
I = im2double(I);
[J, thresh] = edge(I, 'Roberts', 35/255); %边缘检测 ,roberts算子, 阈值为归一化后的35/255
figure;
subplot(121),imshow(I);
subplot(122),imshow(J);

Prewitt 算子

函数 edge ( )

I = imread('cameraman.tif');
% I = imread('rice.png');
I = im2double(I);
[J, thresh] = edge(I, 'prewitt', [], 'both');%默认阈值, 从水平和竖直方向进行设置
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);

Sobel 算子

函数 edge ( )

I = imread('gantrycrane.png'); %RGB彩色图
% imshow(I);
I = rgb2gray(I);
[J, thresh] = edge(I, 'sobel', [], 'horizontal');
figure;
subplot(121);imshow(I);
subplot(122);imshow(J);

Canny 算子

函数 edge ( )

LOG 算子

函数 edge ( )

I = imread('cameraman.tif');
I = im2double(I);
J = imnoise(I, 'gaussian', 0, 0.005);
[K, thresh] = edge(J, 'Log', [], 2.3);
figure;
subplot(121),imshow(I);
subplot(122),imshow(K);

Log 算子

阈值分割技术

全局阈值

直方图显示

I = imread('rice.png');
subplot(121),imshow(I);
subplot(122),imhist(I, 200); %直方图显示

全局阈值分割

I = imread('rice.png');
J = I > 120; %全局阈值为120 , 波谷大概是120
K = I > 130; %全局阈值为130
figure;
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);

Otsu阈值分割

I = imread('coins.png');
I = im2double(I);
T = graythresh(I); %获取阈值
J = im2bw(I, T); %图像分割
subplot(121),imshow(I);
subplot(122),imshow(J);

迭代式阈值分割法

clear, clc
I = imread('cameraman.tif');
I = im2double(I);
T0 = 0.01; %精度
% T1 = graythresh(I) %用Otsu求阈值
T1 = min(I(:)) + max(I(:)) / 2; %初始估计阈值
r1 = find(I > T1); %找出比阈值大的像素
r2 = find(I <= T1); %找出比阈值小的像素
T2 = (mean(I(r1)) + mean(I(r2))) / 2; %各个像素加和求平均
while abs(T2 - T1) < T0 %
    T1 = T2;
    r1 = find(I > T1);
    r2 = find(I <= T1);
    T2 = (mean(I(r1)) + mean(I(r2))) / 2;
end

J = im2bw(I, T2);
subplot(121),imshow(I);
subplot(122),imshow(J);

区域分割技术

区域生长法

将相邻的具有同种性质的像素或其他区域归并刀目前的区域中从而逐步增长区域

相似性度量 : 平均灰度值, 纹理, 颜色

缺点 : 往往造成过度分割

取决分割好坏的三个因素 : 种子点的选取  生长规则  终止条件

分水岭分割

clear,clc;
I = imread('circbw.tif');
J = watershed(I, 4); % 4个连通区域,默认为8
subplot(121),imshow(I);
subplot(122),imshow(J);

2015-05-04 22:21:04 sinat_27174709 阅读数 266
  • 区块链技术详解

    区块链技术入门教程,该课程对目前区块链知识进行一次体系化的讲解,使得初学者能迅速抓住区块链技术的核心思想,对区块链应用和智能合约有一个的、由浅入深的了解。

    12379 人正在学习 去看看 CSDN讲师

列一下书单:

《c++ Primer》第五版 中文版 看了大半,正在理解与训练中

《深入理解计算机系统》对底层研究很有帮助

《数字图像处理》第三版 学习中,为了指纹识别打下基础

《算法导论》锻炼算法能力和数学能力

《算法引论》同上,这个看着更轻松

《编程之美》翻阅

《编程珠玑》翻阅

《Visual C++ 数字图像处理技术详解》 纯技术书,练手

《Windows游戏编程之从零开始》小时候的梦想,现在看看还适不适合这条路


望6月份的时候,编程能力显著提高,图像处理也从原理上得到掌握,算法能力也得到加强,cheers!

2018-08-16 22:54:17 Eastmount 阅读数 9743
  • 区块链技术详解

    区块链技术入门教程,该课程对目前区块链知识进行一次体系化的讲解,使得初学者能迅速抓住区块链技术的核心思想,对区块链应用和智能合约有一个的、由浅入深的了解。

    12379 人正在学习 去看看 CSDN讲师

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

同时推荐作者的C++图像系列知识:
[数字图像处理] 一.MFC详解显示BMP格式图片
[数字图像处理] 二.MFC单文档分割窗口显示图片
[数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
[数字图像处理] 四.MFC对话框绘制灰度直方图
[数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
[数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
[数字图像处理] 七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本篇文章作为第一篇,将讲解图像处理基础知识和OpenCV入门函数,知识点如下:
1.图像基础知识
2.OpenCV读写图像
3.OpenCV像素处理

PS: 文章也学习了网易云高登教育的知识,推荐大家学习。

PSS:2019年1~2月作者参加了CSDN2018年博客评选,希望您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

五年来写了314篇博客,12个专栏,是真的热爱分享,热爱CSDN这个平台,也想帮助更多的人,专栏包括Python、数据挖掘、网络爬虫、图像处理、C#、Android等。现在也当了两年老师,更是觉得有义务教好每一个学生,让贵州学子好好写点代码,学点技术,"师者,传到授业解惑也",提前祝大家新年快乐。2019我们携手共进,为爱而生。

一.图像基础知识

图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

图像通常包括二值图像、灰度图像和彩色图像。

1.二值图像
二值图像中任何一个点非黑即白,要么为白色(像素为255),要么为黑色(像素为0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127则设置为255,否则设置为0。

2.灰度图像
灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:
(1) 浮点算法:Gray=R0.3+G0.59+B0.11
(2) 整数方法:Gray=(R
30+G59+B11)/100
(3) 移位方法:Gray=(R28+G151+B77)>>8;
(4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)
(5) 仅取绿色:Gray=G;
(6) 加权平均值算法:根据光的亮度特性,公式: R=G=B=R
0.299+G*0.587+B0.144

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。改变象素矩阵的RGB值,来达到彩色图转变为灰度图。

3.彩色图像
彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。



二.OpenCV读写图像

本文主要使用Python2.7和OpenCV进行讲解,首先调用"pip install opencv-python"安装OpenCV库,如下图所示:

1.读入图像
OpenCV读图像主要调用下面函数实现:

img = cv2.imread(文件名,[,参数])
参数(1) cv2.IMREAD_UNCHANGED (图像不可变)
参数(2) cv2.IMREAD_GRAYSCALE (灰度图像)
参数(3) cv2.IMREAD_COLOR (读入彩色图像)
参数(4) cv2.COLOR_BGR2RGB (图像通道BGR转成RGB)

2.显示图像
显示图像调用函数如下:

cv2.imshow(窗口名, 图像名)

3.窗口等待
调用函数如下:

cv2.waitKey(delay)
键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。

4.删除所有窗口
调用函数如下:

cv2.destroyAllWindows() 删除所有窗口
cv2.destroyWindows() 删除指定的窗口

5.写入图片
调用函数如下:

retval = cv2.imwrite(文件地址, 文件名)

下面代码是读入图片并显示保存。

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg")

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

输出结果如下图所示,并且在文件夹下保存了一张名为“testyxz.jpg”的图像。

如果代码中没有watiKey(0)函数,则运行结果如下图所示:

同时
可以对代码进行升级,如下所示:

#无限期等待输入
k=cv2.waitKey(0)
#如果输入ESC退出
if k==27:
    cv2.destroyAllWindows()


三.OpenCV像素处理

1.读取像素
灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。

灰度图像:返回值 = 图像(位置参数)
eg: test=img[88,42]
彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素
eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]

2.修改图像
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。

灰度图像:
img[88,142] = 255
彩色图像:
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色图像:方法二
img[88,142] = [255, 255, 255]

下面代码是获取像素及修改的操作。

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
test = img[88,142]
print test
img[88,142] = [255, 255, 255]
print test

#分别获取BGR通道像素
blue = img[88,142,0]
print blue
green = img[88,142,1]
print green
red = img[88,142,2]
print red

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

输出结果如下所示:
[158 107 64]
[255 255 255]
255
255
255

下面代码是将行为100到200、列150到250的像素区域设置为白色。

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#该区域设置为白色
img[100:200, 150:250] = [255,255,255]

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

运行结果如下图所示:

希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。
(By:Eastmount 2018-08-16 夜11点 https://blog.csdn.net/Eastmount/

2016-01-01 12:29:14 lz20120808 阅读数 323
  • 区块链技术详解

    区块链技术入门教程,该课程对目前区块链知识进行一次体系化的讲解,使得初学者能迅速抓住区块链技术的核心思想,对区块链应用和智能合约有一个的、由浅入深的了解。

    12379 人正在学习 去看看 CSDN讲师

  2015由研一走到研二,由老老实实上课到步入实验室接手项目。
  本命年转眼即逝,不得不总结下自己的所做作为。

书籍阅读

看了《Visual C++数字图像处理技术详解》数章内容,并学习了其中的程序实现。
看了《Visual C++数字图像模式识别典型案例详解》数章内容。
看了《统计学习方法》,不到一半内容,很有难度。
学习《Effective C++》、《编译原理》、《数据库系统教程》、《数据结构与算法》、《第一行代码:Android》
这些技术类的书,有些做了笔记,有些没做(确实不应该)
文学类书籍:
《傲慢与偏见》,《愤怒的葡萄》,《少有人走的路》,《三体2》,《三十六谋略全书》、《这个国家会好吗:中国崛起的经济学分析》

《傲慢与偏见》短评

这就是个悲剧。讲的是美国30,40年代,在无情吃人的资本主义的压迫下,乔德一家四处流浪寻找食物的艰辛过程。他们失去了土地, 失去了住处,失去了可以维持生活的工作。为了活下来,他们艰苦的迁徙到西部寻找希望,虽然希望在读者看来是那么的渺茫,但是仍 然要争取,在流浪的路上,他们与恶势力斗争,但是吃人的社会制度显然不顾农民的死活,堆积如山的葡萄,橙子被故意毁掉也不给即 将饿死的人。因为那样资本家就更没有了利润,本来很少的工作却招来大量的劳工以此压榨工钱,作为葡萄都要愤怒了。书中更多的笔 墨写于苦难的百姓在一起互帮互助,共度难关,他们敢于面对苦难,不抛弃,不放弃,坚持寻找希望。从古到今,从内到外,都存在着 压迫与剥削,很难改变,剩下的只有事在人为。
《愤怒的葡萄》短评
四个婚姻中当属达西的最为曲折与感动。出身富贵,长相出众的达西显然有傲慢的资本,而这却导致举止优雅,漂亮而有内涵的伊丽莎白对他产生偏见,而后因为小人对达西的污蔑更加深了误会。但是缘分未尽,后来的相遇相知使误会消逝,而且伊丽莎白也懂得了达西的真心,终成眷属。伊丽莎白的品性与追求正是作者所要宣扬的。为人格的尊严,婚姻的自由与真挚,地位的平等而战。这是小说最重要的思想。但是她并不是没有缺点的,以貌取人,听信一方之辞,差点葬送了她美好的婚姻。四对情侣都喜结连理,但是各自的婚姻观却不同。对于的婚姻的价值观,从古至今看来都是相似的。

看书还是要做笔记的,否则很容易遗忘内容。比如《少有人走的路》这本书,我没做笔记,现在已经没有什么印象了。这本书像是一本心灵鸡汤,但是涉及到生活中的认知问题,读后一定会豁然开朗,打算以后重读。

《三体2:黑暗森林》

这是我今生读到的第一本科幻小说。因为这是中国首次获得雨果奖也是亚洲首次获得此大奖。而且还要排成电影,慕名拜读。确实写得很好。
其中宇宙社会学(不管自创还是借鉴,争论相当广泛,对于未接触过的人来说还是挺受用)
宇宙社会学的两条公理是第一,生存是文明的第一需要;第二,文明不断增长和扩张,但宇宙中的物质总量保持不变。因此宇宙就像是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,轻轻拨开树枝探索外界,同时竭力不发出脚步声隐藏行踪,因为林中到处都有与他一样潜行的猎人。如果他发现了别的生命不管是不是猎人,不管是天使还是魔鬼,能做的只有一件事:开枪消灭之,在这片森林任何人视他人为地狱,永恒的威胁来源、永恒的资源抢夺者,只有先下手为强的不变思维才能抵销未来潜在风险,任何暴露自己存在的生命都将很快被消灭。在面对宇宙中的未知文明,霍金也认为不能贸然联系。
其中的语言也很美:给岁月以文明,而不是给文明以岁月。是多么的富有哲理,当然是改变自帕斯卡的“给时光以生命,而不是给生命以时光”。

《三十六谋略全书》

第一套〖胜战计〗
第01计 瞒天过海
第02计 围魏救赵
第03计 借刀杀人
第04计 以逸待劳
第05计 趁火打劫
第06计 声东击西
第二套〖敌战计〗
第07计 无中生有
第08计 暗渡陈仓
第09计 隔岸观火
第10计 笑里藏刀
第11计 李代桃僵
第12计 顺手牵羊
第三套〖攻战计〗
第13计 打草惊蛇
第14计 借尸还魂
第15计 调虎离山
第16计 欲擒故纵
第17计 抛砖引玉
第18计 擒贼擒王
第四套〖混战计〗
第19计 釜底抽薪
第20计 混水摸鱼
第21计 金蝉脱壳
第22计 关门捉贼
第23计 远交近攻
第24计 假道伐虢
第五套〖并战计〗
第25计 偷梁换柱
第26计 指桑骂槐
第27计 假痴不癫
第28计 上屋抽梯
第29计 树上开花
第30计 反客为主
第六套〖败战计〗
第31计 美人计
第32计 空城计
第33计 反间计
第34计 苦肉计
第35计 连环计
第36计 走为上计
为方便记忆,有学者编诗一首:
金玉檀公策,
借以擒劫贼,
鱼蛇海间笑,
羊虎桃桑隔,
树暗走痴故,
釜空苦远客,
屋梁有美尸,
击魏连伐虢。

《这个国家会好吗:中国崛起的经济学分析》

这本书分析了中国改革开放30多年成功的经验,主要从国际背景,文化背景,经济学原理,政府与市场关系,制度原理进行了分析。
1. 利益分配中的破坏性要素:”以很低的成本给对方造成很大的伤害,从而从对方应该获得的报酬中拿走一部分报酬,即低成本伤害权,会造成破坏性要素参与分配”。所以政府要提高资本家的破坏成本。

  1. 通货膨胀有外生性原因,也有内生性原因,外生性原因就是政府向市场投放更多的货币,而内生性原因实际上是金融杠杆。通货膨胀不仅对经济发展“没有用”,只能影响价格水平而不能提高实际产量,还对经济发展“有害”,会导致严重的经济资源的配置失衡和浪费。
  2. 关于信仰。东西文化的差别不在于讲不讲为人处事,真正差别在于:东方认为人活在世界上最重要的就是为人处事,为人就是履行人生义务,处世就是协调个人生活与社会生活的关系。而西方文化则认为,除了为人处事。人生还有更重要的事情要做,敬仰上帝。所以东西方文化的根本差异不在于谁讲什么谁没讲什么而在于排列的顺序。

读书不只是读过而已,融会贯通才能达到登峰造极。这才是读书的最终目标。

论文阅读

  1. 查阅了视觉感知,图像插值相关论文。
  2. 学习了相机标定的相关论文,从上半年接触相关论文,断断续续一直到下半年才有个整体认识。并在本博客做了下总结。理论联系实践才会有深刻理解,opencv提供了很大帮助。
  3. 学习了图像拼接,相关的理论发展已经比较成熟,但是应用到项目中,还有很多注意点。
  4. 翻译了一篇论文,(中译英),结果老师很不满意。甚是惭愧,一直想切实提高英语能力,但是没有坚持下来,只是靠背英语单词是不行的,要多看相关方向英文论文。

项目

  1. 接手本实验室的项目。涉及标识符识别与缺陷检测的项目。做了很多的实现与调试。
  2. 研究图像拼接相关内容。
  3. 比较高兴地是用了两个月时间对android有了简单入门,并做了几个小的APP。 虽然参赛没获得成绩,也是有很大收获。

      专业虽然非计算机,但是以后却要从事计算机相关工作,也就是名字高大上的攻城狮或者受鄙视的程序猿。因此编程能力是最重要的。自己一直在努力提高。
      经常在网上碰到一些牛人的经历,因此感觉自己努力了这么多年,依然那么的平凡,渺小,所有的成绩都微不足道,路漫漫其修远兮,吾将上下而求索。

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