1. 程式人生 > >【影象處理知識複習】03對比度線性拉伸matlab,C++實現

【影象處理知識複習】03對比度線性拉伸matlab,C++實現

演算法:(1), 通過畫灰度直方圖點選開啟連結,估計目標物灰度範圍。(2), 求斜率,即斜率大於1,則拉伸;(3), 根據線性公式,求拉伸後灰度值,如下圖


1. matlab程式碼:

%題目: 對比度拉伸
%意義:所期望觀察的物件因對比度不足而不夠清晰,需進行對比度拉伸。

%灰度值的分段線性對映
%已知條件:原影象的目標景物灰度範圍[fa,fb],拉伸後範圍在[ga,gb]。
%實現方法:目標景物灰度範圍拉伸k2=(gb-ga)/(fb-fa),其他進行抑制k1=ga/fa,k3=(255-gb)/(255-fb)
%難點:分段線性函式求解。

clc;
clear;
image = rgb2gray(imread('D:/Code/Image/classic.jpg'));
figure,imshow(image);

%1, 通過畫灰度直方圖,估計目標物灰度範圍。
fa = 75;   % 橫座標,即目標灰度區間[75,150]
fb = 150; ga = 30; % 縱座標, 即拉伸後目標灰度區間[30,200],動態範圍擴大 gb = 200; %2, 求斜率,即斜率大於1,則拉伸 k1 = ga/fa; k2 = (gb-ga)/(fb-fa); k3 = (255-gb)/(255-fb); %3, 求拉伸後灰度值 [row,col] = size(image); g = zeros(row,col);%預設g 為double。g = f; g為uint8 for i=1:row for j=1:col if 0<=image(i,j) && image(i,j)<=fa g(i,j) = k1*image(i,j); else if fa<=image(i,j) && image(i,j)<=fb g(i,j) = k2*(image(i,j)-fa)+ga; else if fb<=image(i,j) && image(i,j)<=255 g(i,j) = k3*(image(i,j)-fb)+gb; end end end end end figure,imshow(uint8(g));%因為宣告g為double,必須轉為uint8,因為影象灰度範圍[0,255] % imshow顯示時對double型是認為在0~1範圍內,所以大於1時都是顯示為白色,從uint8轉換的數除了0都是大於等於1的。 % imshow顯示uint8型時是0~255範圍。 % 程式設計時用uint8型時會出現減的結果沒有負數,乘除時有精度問題,但uint8型佔用記憶體小。

效果圖:


2. C++實現

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
	Mat img = imread("D:/Code/Image/classic.jpg",0);
	imshow("原圖",img);
	
	//假設已知目標灰度範圍[75,150],需要拉伸到[30,200]
	int x1 = 75, y1 = 30, x2 = 150, y2 = 200;
	int x; //當前灰度值
	//Mat y = img.clone(); //拉伸後的灰度值
	Mat y = Mat::zeros(img.size(), img.type()); //拉伸後的灰度值
	double k1 = y1 / x1, k2 = (y2 - y1) / (x2 - x1), k3 = (255 - y2) / (255 - x2);
	
	for (int i = 0; i < img.rows; i++)
	{
		for (int j = 0; j < img.cols; j++)
		{
			x = img.at<uchar>(i, j);
			if (0 <= x && x < x1)
				y.at<uchar>(i, j) = k1 * x;
			else if (x1 <= x && x < x2)
				y.at<uchar>(i, j) = k2 * (x - x1) + y1;
			else if (x2 <= x && x < 255)
				y.at<uchar>(i, j) = k3 * (x - x2) + y2;
		}
	}
	imshow("效果圖", y);

	waitKey();
	return 0;
}

效果圖:


灰級窗:演算法和對比度線性拉伸一樣,只是分段線性函式不同。分段啊線性對映,將目標物進行對比度增強,其他灰度設定為0(即背景全黑);

灰級窗切片:演算法和灰級窗一樣,分段線性函式不同,目標簡單置為0,背景依然置為255。也就是二值化。

相關推薦

影象處理知識複習03對比度線性matlabC++實現

演算法:(1), 通過畫灰度直方圖點選開啟連結,估計目標物灰度範圍。(2), 求斜率,即斜率大於1,則拉伸;(3), 根據線性公式,求拉伸後灰度值,如下圖1. matlab程式碼:%題目: 對比度拉伸 %意義:所期望觀察的物件因對比度不足而不夠清晰,需進行對比度拉伸。 %灰

影象處理知識複習08影象旋轉後空洞問題處理 Matlab

演算法:遍歷旋轉後圖像,判斷當前點是否為空穴(四近鄰畫素值都大於0,且當前點等於0)。鄰近插值法,則左邊畫素替代當前0畫素,如果均值插值,則取四近鄰均值。效果如下:1. Matlab程式碼如下:%題目:影象的旋轉,(1)鄰近插值法,(2)均值插值,處理空穴。 %旋轉公式;I

影象處理知識複習10影象縮放到任意大小 C++實現

演算法類似於前面講的點選開啟連結,不同的是,這個給定的是縮放後的影象大小,前面演算法給定的縮放比例。條件:給出影象,和要縮放到的大小。效果如下:C++程式碼實現如下:#include <opencv2/opencv.hpp> using namespace cv;

劍指offer圓圈中最後剩下的數字C++實現

一行 AC 個人 ron namespace itl i++ float color 原創博文,轉載請註明出處! # 題目 # 思路 本題即為典型的約瑟夫問題,通過遞推公式解決。 第一行表示每個人的下標,現在要從11個人中刪除報數為3的人,從圖

數字影象處理系列二基本概念:亮度、對比度、飽和度、銳化、解析度

本系列python版本:python3.5.4 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim

影象處理彩色影象自適應對比度增強(OpenCV實現

  提到影象增強,第一印象就是直方圖均衡與直方圖規定化,這是最常見的也是非常有效的全域性影象增強方法。在前不久的一次組會討論中,課題組的一位同學提到了“自適應影象增強”,雖然自己以前也用過,但是一時間忘記了原理,就去複習了一下,其實他使用的方法的全稱應該叫自適

影象處理基礎知識-混合高斯背景建模

0、高斯模糊原理-------------------------------------------------------分割線----------------------------------------------------------------1、一維高斯函式

影象處理 增加程式速度的方法

1. stack(棧) heap(堆) 和全域性區 測試BGR轉YUV  的表在stack 和 heap  2. 查詢表   部分查詢表  和3D查詢表  速度比較   3. 查詢表放在堆上和棧上的速度比較   4.

影象處理 | 附高清經典影象處理書籍下載

概述: 1)預處理是指處於最低抽象層次的影象上所進行的操作,這時處理的輸入和輸出都是亮度影象。 2)預處理並不會增加影象的資訊量預處理有助於抑制與特殊的影象處理或分析任務無關的資訊。因此預處理的目的是改善影象資料,抑制不需要的變形或者增強某些對於後續處理重要的影象特徵。 影象預處理方

影象處理工業相機原理詳述 (轉載)

轉自:  https://blog.csdn.net/HelloZEX/article/details/80905095 工業相機是機器視覺系統中的一個關鍵元件,其最本質的功能就是將光訊號轉變成有序的電訊號。選擇合適的相機也是機器視覺系統設計中的重要環節,相機的選擇不僅直接決定所採集到的影象

影象處理——OpenCV(2)

目錄 1、測試程式碼 2、報錯如下 3、報錯原因 4、解決方法 1、測試程式碼 #include <iostream> #include "stdafx.h" #include <opencv2/core/core.hpp> #include <

影象處理——OpenCV(1)

目錄 1、測試程式碼 2、報錯如下: 3、報錯原因:未新增庫 4、解決方法: 1、測試程式碼 #include <iostream> #include "stdafx.h" #include <opencv2/core/core.hpp> #inclu

影象處理——MATLAB基礎篇cumsum

目錄 B = cumsum(A) B = cumsum(A,dim) B = cumsum(___,direction) B = cumsum(___,nanflag) B = cumsum(A) A = 1:5; B = cumsum(A) A = [1

影象處理——MATLAB基礎篇find函式

1、k = find(X) 2、k = find(X,n) 3、k = find(X,n,direction) 4、[row,col] = find(___) 5、[row,col,v] = find(___) 1、k = find(X) 查詢矩陣中非0元素的位置 X

影象處理——MATLAB基礎篇floor函式

1、floor(x): 2、floor(t): 3、floor(t,unit): 1、floor(x): 取整 2、floor(t): 將持續時間陣列中的每個值舍入到小於或等於該值的最接近的秒數 3、floor(t,unit): 將t的每個元素舍入到小

影象處理Lightroom Classic CC 2019 for Mac中文破解版

Lightroom Classic CC 2019 for Mac中文破解版是目前最強大的影象處理軟體之一,簡稱Lr CC 2019破解版,使用lightroom mac 破解版可以讓您獲得最佳的攝影效果所提供的圖片整理編輯工具,提高照片的色彩、刪除瑕疵、伸展畫面等等,可以為您的照片錦上添花。新版L

數字影象處理系列四影象資料集增強方式總結和實現

本系列python版本:python2.7.15 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的開發環境是jupyter notebook,是一個python的互動式開發環境,測試十分方便,並集成了vim操作,

影象處理RGB影象邊緣檢測

灰度圖邊緣檢測    在學習影象處理時,首先接觸到的就是灰度影象的邊緣檢測,這是影象處理最基礎的也是最重要的一環,熟悉影象邊緣檢測有助於我們學習其他的數字影象處理方法。由於影象的邊緣區域會存在明顯的畫素值階躍,因此邊緣檢測主要是通過獲得影象灰度梯度,進而通過梯

影象處理中的分割演算法

    區域生長方法也是一種常用的區域分割技術,其基本思路是首先定義一個生長準則,然後在每個分割區域內尋找一個種子畫素,通過對影象進行掃描,依次在種子點周圍鄰域內尋找滿足生長準則的畫素並將其合併到種子所在的區域,然後再檢查該區域的全部相鄰點,並把滿足生長準則的點合併到該區域,

影象處理Matlab開啟PCD或者PLY檔案點雲檔案

一、Windows系統實現配置PCL庫 最新版本的PCL Windows已經進行了更新,不少網路現有教程都無法使用。建議放棄掙扎,使用PCL更換Ubuntu。 二、Matlab開啟PCD或者其他點雲檔案 如果提示缺少pcread,會自動安裝MATLAB影象處理Toolbox。 p