تبدیل rgb به hsi در پایتون
مدلهای معروف رنگی RGB و HSI دو مدل رنگی معروف در دنیای پردازش تصویر و کار با تصاویر دیجیتال است. در این نوشته روش تبدیل دادههای تصویر RGB به HSI را با کمک زبان برنامه نویسی پایتون به شما آموزش میدهیم.
تبدیل rgb به hsi در پایتون
تبدیل RGB به HSI دارای یک فرمول ریاضی معروف است که ابتدا میتوانید در زیر آن را بررسی کنید:

اگر فرمول بالا را دقت کنید میبینید که به سادگی فقط کافیست این فرمول را تبدیل به یک تابع زبان پایتون کنید. کد پایتون زیر به شما کمک میکند تا تبدیل RGB به HSI در پایتون انجام دهید.
def RGB_TO_HSI(img):
with np.errstate(divide='ignore', invalid='ignore'):
#Load image with 32 bit floats as variable type
bgr = np.float32(img)/255
#Separate color channels
blue = bgr[:,:,0]
green = bgr[:,:,1]
red = bgr[:,:,2]
#Calculate Intensity
def calc_intensity(red, blue, green):
return np.divide(blue + green + red, 3)
#Calculate Saturation
def calc_saturation(red, blue, green):
minimum = np.minimum(np.minimum(red, green), blue)
saturation = 1 - (3 / (red + green + blue + 0.001) * minimum)
return saturation
#Calculate Hue
def calc_hue(red, blue, green):
hue = np.copy(red)
for i in range(0, blue.shape[0]):
for j in range(0, blue.shape[1]):
hue[i][j] = 0.5 * ((red[i][j] - green[i][j]) + (red[i][j] - blue[i][j])) / \
math.sqrt((red[i][j] - green[i][j])**2 +
((red[i][j] - blue[i][j]) * (green[i][j] - blue[i][j])))
hue[i][j] = math.acos(hue[i][j])
if blue[i][j] <= green[i][j]:
hue[i][j] = hue[i][j]
else:
hue[i][j] = ((360 * math.pi) / 180.0) - hue[i][j]
return hue
#Merge channels into picture and return image
hsi = cv2.merge((calc_hue(red, blue, green), calc_saturation(red, blue, green), calc_intensity(red, blue, green)))
return hsi
اگر کدهای بهتری برای تبدیل RGB به HSI در پایتون دارید در بخش نظرات همین نوشته برای ما ارسال کنید تا به این نوشته اضافه شود.
برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 3.5]



















مرسی از مقاله
موفق باشین
خروجی HSI رو میشه مستقیم با OpenCV نمایش داد؟
خروجی HSI رو مستقیماً نمیشه با OpenCV نمایش داد، چون OpenCV معمولاً با فرمتهای BGR یا RGB کار میکنه. برای نمایش HSI باید ابتدا اون رو به RGB تبدیل کنید.
این پیاده سازی روی تصاویر ۸ بیتی جواب میده؟
این پیادهسازی به طور کلی برای تصاویر با مقادیر نرمالایز شده (بین 0 و 1) طراحی شده، اما با کمی تغییرات میتونید اون رو برای تصاویر 8 بیتی هم استفاده کنید.
برای محاسبه Hue از حلقه استفاده شده و نمیشه برداری نوشتش؟
بله، امکان برداریسازی محاسبه Hue وجود دارد و استفاده از حلقه در اینجا برای خوانایی بیشتر کد بوده است.
این کد روی تصاویر بزرگ هم سریع اجرا میشه یا کند میشه؟
سرعت اجرای این کد بستگی به ابعاد تصویر و سختافزار شما دارد، اما برای تصاویر بزرگ ممکن است کمی کند باشد.