第6章 Python 數字圖像處理(DIP) - 彩色圖像處理2 - 灰度分層(灰度分割)和彩色編碼,灰度值到彩色變換,Gray to RGB

第6章主要講的是彩色圖像處理,一些彩色模型如RGB,CMK,CMYK,HSI等色彩模型;彩色模型的變換關系;還包含由灰度圖像怎樣處理成假彩色圖像;使用彩色分割圖像等。本章比較少理論還有變換的描述,主要以代碼為主,如有需要,請自行查看書本。

這里寫目錄標題

  • 假彩色圖像處理
      • 灰度分層(灰度分割)和彩色編碼
      • 灰度值到彩色變換
      • Gray -> RGB

假彩色圖像處理

灰度分層(灰度分割)和彩色編碼

def gray_slice(img_gray):img_ori = img_gray / 255.rows,cols = img_ori.shape[:2]labels = np.zeros([rows,cols])for i in range(rows):for j in range(cols):if(img_ori[i,j] < 0.125):labels[i,j] = 0elif(img_ori[i,j] < 0.25):labels[i,j] = 0.2elif(img_ori[i,j] < 0.375):labels[i,j] = 0.4elif(img_ori[i,j] < 0.5):labels[i,j] = 0.5elif(img_ori[i,j] < 0.625):labels[i,j] = 0.6elif(img_ori[i,j] < 0.75):labels[i,j] = 0.8elif(img_ori[i,j] < 0.875):labels[i,j] = 0.9else:labels[i,j] = 1return labels
# Gray to RGB
from skimage import io, exposure, colorimg_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0620(a)(picker_phantom).tif', 0)labels = gray_slice(img_ori)
labels = np.uint8(labels * 255)
img_rgb = color.label2rgb(labels)plt.figure(figsize=(20, 5))
plt.subplot(141), plt.imshow(img_ori, 'gray'), plt.title('Original')plt.subplot(142), plt.imshow(img_rgb, ), plt.title('Pseudo RGB')
# plt.subplot(143), plt.imshow(img_cmyk, ), plt.title('CMYK')
# plt.subplot(144), plt.imshow(img_r, ), plt.title('Red Channel')plt.tight_layout()
plt.show()

在這里插入圖片描述

# Gray to RGB
from skimage import io, exposure, color
def gray_slice(img_gray):rows,cols = img_gray.shape[:2]labels = np.zeros([rows,cols], np.uint8)for i in range(rows):for j in range(cols):if(img_gray[i,j] < 250):labels[i,j] = 125else:labels[i,j] = 100return labelsimg_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0621(a)(weld-original).tif', 0)labels = gray_slice(img_ori)
img_rgb = color.label2rgb(labels)plt.figure(figsize=(20, 5))
plt.subplot(141), plt.imshow(img_ori, 'gray'), plt.title('Original')plt.subplot(142), plt.imshow(img_rgb, ), plt.title('Pseudo RGB')
# plt.subplot(143), plt.imshow(img_cmyk, ), plt.title('CMYK')
# plt.subplot(144), plt.imshow(img_r, ), plt.title('Red Channel')plt.tight_layout()
plt.show()

在這里插入圖片描述

# Gray to RGB
from skimage import io, exposure, color
def gray_slice(img_gray):rows,cols = img_gray.shape[:2]labels = np.zeros([rows,cols], np.uint8)for i in range(rows):for j in range(cols):if(img_gray[i,j] < 31):labels[i,j] = 0elif(img_gray[i,j] < 63):labels[i, j] = 10elif(img_gray[i,j] < 95):labels[i, j] = 20elif(img_gray[i,j] < 127):labels[i, j] = 30elif(img_gray[i,j] < 159):labels[i, j] = 40elif(img_gray[i,j] < 191):labels[i, j] = 255elif(img_gray[i,j] < 223):labels[i, j] = 255else:labels[i,j] = 255return labelsimg_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0622(a)(tropical_rain_grayscale.tif', 0)labels = gray_slice(img_ori)
img_rgb = color.label2rgb(labels)hist, bins, patches = plt.hist(img_ori.flatten(), bins=256)
plt.figure(figsize=(15, 10))
plt.subplot(211), plt.imshow(img_ori, 'gray'), plt.title('Original')
plt.subplot(212), plt.imshow(img_rgb, ), plt.title('Pseudo RGB')
plt.tight_layout()
plt.show()

在這里插入圖片描述
在這里插入圖片描述

灰度值到彩色變換

# Gray to RGB
from skimage import io, exposure, colorimg_r = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0627(a)(WashingtonDC Band3-RED).TIF', 0)
img_g = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0627(b)(WashingtonDC Band2-GREEN).TIF', 0)
img_b = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0627(c)(1)(WashingtonDC Band1-BLUE).TIF', 0)
img_ir = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0627(d)(WashingtonDC Band4).TIF', 0)# IR G B 
img_irgb = np.dstack([img_ir, img_g, img_b])# R IR B
img_RIRB = np.dstack([img_r, img_ir, img_b])plt.figure(figsize=(15, 10))
plt.subplot(231), plt.imshow(img_r, 'gray'), plt.title('Red Band')
plt.subplot(232), plt.imshow(img_g, 'gray'), plt.title('Green Band')
plt.subplot(233), plt.imshow(img_b, 'gray'), plt.title('Blue Band')
plt.subplot(234), plt.imshow(img_ir, 'gray'), plt.title('IR Band')
plt.subplot(235), plt.imshow(img_irgb), plt.title('IR G B ')
plt.subplot(236), plt.imshow(img_RIRB), plt.title('R IR B')
plt.tight_layout()
plt.show()# RGB
img_rgb = np.dstack([img_r, img_g, img_b])
plt.figure(figsize=(5, 5))
plt.imshow(img_rgb), plt.title('RGB')
plt.tight_layout()
plt.show()

在這里插入圖片描述

在這里插入圖片描述

# import numpy as np
# from skimage import io,exposure,color
# import matplotlib.pyplot as plt
# import math
# import sys# 灰度值到彩色變換
# 定義灰度值到彩色變換
L = 255
def GetR(gray):if gray < L/2:return 0elif gray > L/4*3:return Lelse:return 4*gray-2*L
def GetG(gray):if gray < L/4:return 4*grayelif gray > L/4*3:return 4*L-4*grayelse:return L
def GetB(gray):if gray < L/4:return Lelif gray > L/2:return 0else:return 2*L-4*graydef gray2rgb(img_gray):height, width = img_gray.shape[:2]dst = np.zeros((height, width, 3), dtype = 'uint8')for h in range(height):for w in range(width):r,g,b = GetR(img_gray[h,w]),GetG(img_gray[h,w]),GetB(img_gray[h,w])dst[h, w, :] = (r,g,b)return dst
# Gray to RGB
from skimage import io, exposure, colorimg_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0620(a)(picker_phantom).tif', 0)img_rgb = gray2rgb(img_ori)plt.figure(figsize=(20, 5))
plt.subplot(141), plt.imshow(img_ori, 'gray'), plt.title('Original')plt.subplot(142), plt.imshow(img_rgb, ), plt.title('Pseudo RGB')
# plt.subplot(143), plt.imshow(img_cmyk, ), plt.title('CMYK')
# plt.subplot(144), plt.imshow(img_r, ), plt.title('Red Channel')plt.tight_layout()
plt.show()

在這里插入圖片描述

# Gray to RGB
from skimage import io, exposure, colorimg_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0622(a)(tropical_rain_grayscale.tif', 0)img_rgb = gray2rgb(img_ori)plt.figure(figsize=(20, 10))
plt.subplot(141), plt.imshow(img_ori, 'gray'), plt.title('Original')plt.subplot(142), plt.imshow(img_rgb, ), plt.title('Pseudo RGB')
# plt.subplot(143), plt.imshow(img_cmyk, ), plt.title('CMYK')
# plt.subplot(144), plt.imshow(img_r, ), plt.title('Red Channel')plt.tight_layout()
plt.show()

在這里插入圖片描述

Gray -> RGB

嚴格來說這不是由于Gray轉RGB,因為利用原來的GB通道

我們要將RGB表示轉換為gGB表示,也就是用灰度分量g取代藍色分量R,藍色分量B和綠色分量G不變。我們可以從gGB計算出紅色分量R,因為灰度g=pR+qG+tB(其中p=0.2989,q=0.5870,t=0.1140),于是R=(g-qG-t*B)/p。于是我們只要保留B和G兩個顏色分量,再加上灰度圖g,就可以回復原來的RGB圖像。同樣,我們這里的g是可以隨便取代紅綠藍三種分量中的任一分量的。下面進行演示。

# Gray to RGB
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH06/Fig0646(a)(lenna_original_RGB).tif')src = img_ori.copy()
# src_gray = bgr2gray(img_ori)
src_gray = cv2.cvtColor(img_ori, cv2.COLOR_BGR2GRAY)B = src[:,:,0]
G = src[:,:,1]
R = src[:,:,2]# 灰度g=p*R+q*G+t*B(其中p=0.2989,q=0.5870,t=0.1140),于是B=(g-p*R-q*G)/t。于是我們只要保留R和G兩個顏色分量,再加上灰度圖g,就可以回復原來的RGB圖像。
g = src_gray[:]
p = 0.2989; q = 0.5870; t = 0.1140
B_new = (g - p * R - q * G) /t
B_new = np.uint8(normalize(B_new) * 255) # 這種方式會有點偏藍
# B_new = np.uint8(B_new / 255)            # 這種方式會偏綠
src_new = np.zeros((src.shape)).astype("uint8")
src_new[:,:,0] = B_new
src_new[:,:,1] = G
src_new[:,:,2] = Rplt.figure(figsize=(20, 5))
plt.subplot(141), plt.imshow(img_ori[:, :, ::-1]), plt.title('Original')
plt.subplot(142), plt.imshow(src_gray, ), plt.title('GrayScale')
plt.subplot(143), plt.imshow(src_new[..., ::-1], ), plt.title('Gray To RGB')
# plt.subplot(144), plt.imshow(img_r, ), plt.title('Red Channel')plt.tight_layout()
plt.show()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260540.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260540.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

值重新賦值_JavaScript-賦值運算符

好好學習&#xff0c;天天向上賦值運算符賦值運算符必須有變量參與運算&#xff0c;賦值運算符會做兩件事情第一&#xff0c;將變量中原始值參與對應數學運算&#xff0c;與右側的數據第二&#xff0c;將運算結果再重新賦值給變量變量位于操作符的左側賦值運算符符號&#xff1…

超聲換能器的原理及設計_超聲波發生器、變幅桿、焊頭的匹配介紹

一.超聲波換能器原理與設計(超聲波振動系統)匹配摘要&#xff1a;就塑料焊接機的超聲波換能器系統進行設計和計算&#xff0c;并用PRO- E 三維軟件繪出三維模型&#xff0c;最后進行頻率分析&#xff0c;為超聲波換能系統提供了有用的設計方法。關鍵詞&#xff1a;超聲波換能器…

位圖法

判斷集合中存在重復是常見編程任務之一&#xff0c;當集合中數據量比較大時我們通常希望少進行幾次掃描&#xff0c;這時雙重循環法就不可取了。位圖法比較適合于這種情況&#xff0c;它的做法是按照集合中最大元素max創建一個長度為max1的新數組&#xff0c;然后再次掃描原數組…

CentOS查看和修改PATH環境變量的方法

為什么80%的碼農都做不了架構師&#xff1f;>>> 查看PATH&#xff1a;echo $PATH 以添加mongodb server為列 修改方法一&#xff1a; export PATH/usr/local/mongodb/bin:$PATH //配置完后可以通過echo $PATH查看配置結果。 生效方法&#xff1a;立即生效 有效期限…

IOS簡單的登陸界面

主要需要注意的幾個問題&#xff1a; 1.導入圖片方式最好用文件導入 代碼: 在ViewController.m文件中 2.UILable常用屬性 property(nonatomic,copy) NSString *text; //設置文本內容 property(nonatomic,retain) UIFont *font; //設置字體 …

第6章 Python 數字圖像處理(DIP) - 彩色圖像處理3 -色彩變換、彩色校正、彩色圖像平滑和銳化、HSI彩色空間中的分割、RGB空間中的分割、彩色邊緣檢測

這里寫目錄標題色彩變換彩色圖像平滑和銳化使用彩色分割圖像HSI 彩色空間中的分割RGB空間中的分割彩色邊緣檢測彩色圖像中的噪聲色彩變換 # 圖像顏色分量的顯示 from PIL import Imageimg_ori Image.open(DIP_Figures/DIP3E_Original_Images_CH06/Fig0630(01)(strawberries_f…

javascript 在對象中使用 定時器_如何使用JavaScript 面向對象編程

學習目標理解面向對象開發思想掌握 JavaScript 面向對象開發相關模式面向對象介紹什么是對象Everything is object (一切皆對象)我們可以從兩個層次來理解對象&#xff1a;(1) 對象是單個事物的抽象。一本書、一輛汽車、一個人都可以是對象&#xff0c;一個數據庫、一張網頁、一…

char數組轉string_String類和其它數據類型的相互轉換

對于上面的這些包裝類&#xff0c;除了Character以外&#xff0c;都有可以直接使用字符串參數的構造函數&#xff0c;這也就使得我們將String類轉換為這些數據類型變得相當之簡單&#xff0c;即&#xff1a;Boolean(String s)、Integer(String s)、Long(String s)、Float(Strin…

ORACLE 各種閃回操作

1、Flashback Database&#xff08;利用閃回日志恢復&#xff09; Oracle Flashback Database特性允許通過SQL語句Flashback Database語句&#xff0c;讓數據庫前滾到當前的前一個時間點或者SCN&#xff0c;而不需要做時間點的恢復。閃回數據庫可以迅速將數據庫回到誤操作或人為…

【轉】介紹設置Session失效的幾種方法

轉載地址&#xff1a;http://developer.51cto.com/art/201106/269493.htm Session對象是HttpSessionState的一個實例。該類為當前用戶會話提供信息&#xff0c;還提供對可用于存儲信息會話范圍的緩存的訪問&#xff0c;以及控制如何管理會話的方法。下面介紹設置session失效的幾…

mysql導入數據load data infile用法整理

有時候我們需要將大量數據批量寫入數據庫&#xff0c;直接使用程序語言和Sql寫入往往很耗時間&#xff0c;其中有一種方案就是使用MySql Load data infile導入文件的形式導入數據&#xff0c;這樣可大大縮短數據導入時間。 假如是從MySql客戶端調用&#xff0c;將客戶端的文件導…

python3循環一直到一個值結束_一步一步學Python3(小學生也適用) 第十七篇:循環語句for in循環...

一、Python for in循環Python for in 循環&#xff0c;是用來遍歷任何數據序列&#xff0c;如一個列表&#xff0c;一個字符串&#xff0c;一個字典&#xff0c;一個元組等。for in 循環的一般語法如下&#xff1a;for item in 序列:語句塊else:語句塊for in 字符串&#xff1…

設置Jupyter notebook 默認工作路徑,修改Jupyter notebook 默認瀏覽器為Chrome

這里寫目錄標題一 設置Jupyter notebook 默認工作路徑二 修改Jupyter notebook 默認瀏覽器為Chrome一 設置Jupyter notebook 默認工作路徑 安裝好anaconda 后&#xff0c;jupyter notebook默認是有安裝好的。在windows的菜單欄找到anaconda目錄&#xff0c;如下圖 鼠標右鍵點…

python調用c#注意事項_Python調用C#編寫的DLL

起因是工作中需要用的開發編寫的DLL&#xff0c;但是它是使用C#編寫的&#xff0c;本人不想使用C#去寫測試代碼&#xff0c;所以需要使用Python來掉這個DLL內的方法 就用這個就很好&#xff0c;不要問為啥不用微軟的Ironpython和別的啥&#xff0c;好用就行了&#xff0c;解決問…

jquery實戰--定寬

大家有沒有遇到過一個問題&#xff0c;就是一個列表&#xff0c;或是一段文字過多時&#xff0c;截取多余的部分用省略號&#xff0c;好吧&#xff0c;證明你實力的時候到了&#xff0c;我下面先分解一下方法&#xff0c;再用插件寫出來,首先我們說的是&#xff0c;用到的第一個…

struts2 Action獲取表單數據

1.通過屬性驅動式 1.首先設置 表單中的數據的name值 如&#xff1a;<input type"text" name"username" value""> 2.你用的是struts2&#xff0c;那么就在java類中寫一個變量&#xff1a;變量名和頁面上的name值一致 并有這個變量的get 和…

python 計算器 eval ctf_CTF逆向--.NET與Python篇

題目(來源&#xff1a;Jarvis-OJ)&#xff1a;Classical CrackmeClassical CrackMe2FindKeyLoginClassical Crackme首先查殼沒有殼&#xff0c;不過發現這是一個.net的程序&#xff0c;將其拖進dnSpy中&#xff0c;找到主程序&#xff0c;同時發現關鍵代碼&#xff0c;如下所示…

2016年秋季個人閱讀計劃

閱讀書目&#xff1a;《軟件需求十步走》 讀后感發表日期&#xff1a;閱讀書目&#xff1a;《用戶故事與敏捷方法》 讀后感發表日期&#xff1a;第一篇&#xff1a;10月1日 第二篇&#xff1a;10月3日 第三篇&#xff1a;10月7日 第四篇&#xff1a;10月15日 第五篇&#xff1a…

第10章 Python 數字圖像處理(DIP) - 圖像分割 基礎知識 標準差分割法

This Chapter is all about image segmentation. I still not finished whole chapter, but here try to publish some for reference. 這里寫目錄標題基礎知識import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from …

OFBiz的探索進階

主要參照https://cwiki.apache.org/OFBIZ/ofbiz-tutorial-a-beginners-development-guide.html這個教程&#xff0c;實現的過程教程上很詳細&#xff0c;故這里不多說 還參考了下http://www.hotwaxmedia.com/apache-ofbiz-blog/ofbiz/ofbiz-tutorials/ofbiz-tutorial-building-…